類和動態記憶體分配

2021-09-29 14:17:12 字數 1157 閱讀 1013

part 1:

靜態類成員特點:

無論建立了多少物件,程式都只建立乙個靜態類變數副本。也就是說,類的所有物件共享乙個靜態成員。

靜態資料成員在類宣告中宣告,在包含類方法的檔案中初始化。初始化時使用作用域運算子來指出靜態成員所屬的類。

但如果靜態成員是const整數型別或列舉型,則可以在類宣告中初始化。

part 2:在建構函式中使用new時注意事項

1、 new && delete

如果在建構函式中使用new來初始化指標成員,則應在析構函式中使用delete;

new和delete必須相互相容。new對應於delete,new對應於delete;

如果有多個建構函式,則必須以相同的方式使用new,要麼都帶中括號,要麼都不帶,因為只有乙個析構函式,所有的建構函式都必須與它相容;然而,可以在乙個建構函式裡使用new初始化指標,而在另乙個建構函式裡將指標初始化為空,這是因為delete可以用於空指標。

2、 demo

class act;

…act nice; //外部物件

…int main()

…delete pt;

}說明:

執行到定義**塊末尾時,將呼叫自動對應的up的析構函式

對指標pt應用運算子delete時,將呼叫動態物件*pt的析構函式

整個程式結束時,將呼叫靜態物件nice的析構函式

如果物件是靜態變數,則在程式結束時將呼叫物件的析構函式。

part 3: 複製建構函式

應定義乙個複製建構函式,通過深度複製將乙個物件初始化為另乙個物件。

應當定義乙個賦值運算子,通過深度複製將乙個物件複製給另乙個物件。

demo:

string::string(const string & st) //st是新的物件

/*檢查自我賦值的情況

釋放成員指標以前指向的記憶體

複製資料而不僅僅是資料的位址

並返回乙個指向物件的引用

*/string & string::operator=(const string & st)

delete str;

len=st.len;

str=new char[len+1];

std::strcpy(str,st_str);

return *this;

}

類和動態記憶體分配

整理自 c primer plus vector force1 50,60 vector force2 10,70 vector max max max force1,force2 version1 vector max const vector v1,const vector v2 version...

C 類和動態記憶體分配

預設析構函式 複製建構函式 賦值運算子 位址運算子 ifndef zhumeng h define zhumeng h include class zhumeng endif include zhumeng.h int zhumeng numm 0 zhumeng zhumeng zhumeng z...

C 類和動態記憶體分配

如果有這樣的strbad類 include ifdef strbad h define srebad h class strbad endif include include stringbad.h using std cout int strbad num 0 靜態成員變數不能在宣告中初始化 除非...