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的記憶體管理,進而將這三者的記憶體管理統一。首先實現自定義的記憶體管理演算法框架,開放介面...