Struct Class的預設賦值(複製)方式

2021-05-26 20:39:07 字數 1464 閱讀 7398

struct和class的預設賦值方式是由編譯器提供的,並且這種賦值方式是標準裡規定好的。

struct和class的預設賦值方式是一樣的,所以這裡我就以struct來進行簡單說明:

struct的賦值,就是乙個乙個成員進行值的copy。

基於這樣的實現方式,一般情況下沒有問題,但是,成員是指標的時候,就要格外小心了。

原因如下:

指標pa指向a空間

指標pb指向b空間

pa=pb

pa也指向了b空間

這裡在釋放pa指向的空間,就是把b空間釋放了

如果b空間我們是不想釋放的,那麼就會出問題。

因為,當b空間釋放後,系統會將這個空間收回,再利用。

所以,等到我們再次釋放pb指向的空間的時候(b空間),程式就會崩潰。

這也是c++中說的:

一般如果建構函式裡面為裸指標分配了空間的話,都必須重寫拷貝建構函式和賦值函式

***********************************====

下面這段**是驗證struct賦值的。

#include #include typedef struct dataitem

item;

item g_dataitem=;

item ga_dataitem[2]=,

};void changeitem(item *pdataitem);

void changeitem2(item *pdataitem);

main()

void changeitem(item *pdataitem)

void changeitem2(item *pdataitem)

輸出如下:

dataitem address=22ff60

g_dataitem address:402000

ga_dataitem address:40200c

ga_dataitem[0] address:40200c

ga_dataitem[1] address:402018

********************************

dataitem address:22ff60

@changeitem function

pdataitem:22ff60

&g_dataitem:402000

m_item1=3

m_item2=4

m_item3=g_dataitem

@changeitem2 function

pdataitem:22ff60

&g_dataitem:402018

m_item1=7

m_item2=8

m_item3=ga_dataitem[2]

********************************

請按任意鍵繼續. . .

struct class的c 結構體

c 結構體 結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別。第二,相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名...

struct class的c 結構體

c 結構體 結構體就是乙個可以包含不同資料型別的乙個結構,它是一種可以自己定義的資料型別,它的特點和陣列主要有兩點不同,首先結構體可以在乙個結構中宣告不同的資料型別。第二,相同結構的結構體變數是可以相互賦值的,而陣列是做不到的,因為陣列是單一資料型別的資料集合,它本身不是資料型別 而結構體是 陣列名...

struct class和STL的統一記憶體管理

利用c 的new和delete操作符過載特性,可以對自定義的struct和class進行統一記憶體管理,再加上stl allocator的開放特性,便可以將stl容器物件的記憶體管理併入struct和class的記憶體管理,進而將這三者的記憶體管理統一。首先實現自定義的記憶體管理演算法框架,開放介面...