十八靜態成員static
拷貝構造:
1)如果乙個類包含指標形式的成員變數,預設的拷貝建構函式只會複製指標本身,而不會複製指標所指向的內容,這種拷貝稱為淺拷貝。
2)淺拷貝將導致不同物件間的資料共享,如果資料是在堆區,在析構時會引發"double free"
異常;
3)因此必須定義乙個支援複製指標所指向內容的拷貝建構函式,即深拷貝。
拷貝賦值:
在類中編譯器會提供乙個預設的拷貝賦值操作符函式,完成兩個物件的賦值操作,但是和預設拷貝構造類似,是淺拷貝。為了得到深拷貝的效果,必須自己定義乙個支援深拷貝的拷貝賦值函式。
型別& operator=(const 類名& that)
練習:實現string類
class 類名;
資料型別 類名::變數 = 初值; // 定義和初始化
1)靜態成員變數類似全域性變數,內存在全域性區,所以它不屬於物件,也不能在建構函式中定義和初始化,需要在類的外部單獨定義和初始化。
2)使用方法
類名::靜態成員變數;
(常用)
物件.靜態成員變數;
class 類名;
};
1)在靜態成員函式中沒有this指標;
2)使用方法:
類名::靜態成員函式(實參表);
(常用)
物件.靜態成員函式(實參表);
注意:
靜態成員函式中只能訪問靜態成員,而在非靜態成員函式既能訪問靜態成員,也能訪問非靜態成員。
乙個類只允許建立乙個物件。1)禁止在類的外部隨意建立物件:私有化建構函式;
2)在類的內部自己維護唯一的物件:靜態成員變數;
3)提供獲取和訪問該物件的方法:靜態成員函式;
class a
private:
a(void);
a(const a&);
static a a;
};
4)建立方式:
a. 餓漢式:無論單例物件用或不用,程式啟動即建立;
b. 懶漢式:單例物件用的時候再建立,不用時即銷毀;
練習1:自己寫一遍string的實現;
練習2:自己實現單例模式 . .
拷貝構造和拷貝賦值
注意指標型別成員變數的深拷貝問題 拷貝構造屬於定義,並賦值 拷貝賦值屬於已經定義,只是賦值。拷貝構造的深拷貝,因為如果提供了拷貝建構函式,則構造該物件時使用的是拷貝建構函式。在拷貝建構函式中只需要 分配新資源,拷貝新內容,返回自引用即可。但是在拷貝賦值函式中,如果存在指標成員變數一般在物件定義時已經...
day06 小資料池 深淺拷貝 集合
小資料池 快取機制 駐留機制 只是一種規格,不會實際的開闢乙個空間 a 10 b 10 print a b a 10 b 10 print a is b is判斷基於記憶體位址進行判斷 print id a print id b 小資料池支援的物件也是 數字,字串,布林值 乘法的時候總長度不能超過2...
Cpp 拷貝構造與拷貝賦值
如果乙個類包含指標形式的成員變數,系統提供的預設拷貝建構函式,只是複製了指標成員變數本身,而沒有複製該變數所指向的內容,這種拷貝方式被稱為淺拷貝。淺拷貝將導致不同物件間的資料共享,同時會在析構函式中引發 double free 異常。為此就必須自己定義乙個支援複製內容即深拷貝的拷貝建構函式。類的預設...