day 06 拷貝構造 拷貝賦值 靜態成員

2021-08-04 15:31:25 字數 1452 閱讀 1335

十八靜態成員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 異常。為此就必須自己定義乙個支援複製內容即深拷貝的拷貝建構函式。類的預設...