析構 構造 賦值

2021-07-09 14:37:53 字數 1457 閱讀 1701

拷貝構造(copy contructor)

由己存在的物件,建立新物件。也就是說新物件,不由構造器來構造,而是由拷貝構

造器來完成。拷貝構造器的格式是固定的。

class 類名

class a

1 系統提供預設的拷貝構造器。一經實現,不復存在。

2 系統提供的時等位拷貝,也就是所謂的淺淺的拷貝。

3 要實現深拷貝,必須要自定義。

深拷貝與淺拷貝

系統提供預設的拷貝構造器,一經定義不再提供。但系統提供的預設拷貝構造器是等

位拷貝,也就是通常意義上的淺拷貝。如果類中包含的資料元素全部在棧上,淺拷貝也可

以滿足需求的。但如果堆上的資料,則會發生多次析構行為。

this 

系統在建立物件時,預設生成的指向當前物件的指標。這樣作的目的,就是為了帶來

方便。1,避免構造器的入參與成員名相同。

2,基於 this 指標的自身引用還被廣泛地應用於那些支援多重串聯呼叫的函式中。

比如連續賦值。

3.this 指標是 const 型別的

賦值運算子過載(operator=)

class a

};返回棧物件的引用,多用於產生串聯應用。比如連等式。 棧物件是不可以返回引用的。

除非,函式的呼叫者返回自身物件。

class a

a(const a &a)

};1 系統提供預設的賦值運算子過載,一經實現,不復存在。

2 系統提供的也是等位拷貝,也就淺拷貝,乙個記憶體洩漏,重析構。

3 要實再深深的賦值,必須自定義。

4 自定義面臨的問題有三個:

1,自賦值

2,記憶體洩漏

3,重析構。

5 返回引用,且不能用 const 修飾。其目的是實現連等式。

mystring & mystring::operator=(const mystring & another)

}返回棧上引用與物件

返回棧物件

class a

a(const a &a)

};a 傳值:發生拷貝

void foo(a a)

{}int main()

b 傳引用 沒有發生拷貝

void foo(a& a)

{}int main()

c 返回物件

a foo(a& a)

int main()

返回棧物件引用

返回棧物件的引用,多用於產生串聯應用。比如連等式。 棧物件是不可以返回引用的。

除非,函式的呼叫者返回自身物件。

mystring & mystring::operator=(const mystring & another)

}

構造 析構 賦值運算

非內建資料型別 一般而言,只有當生出的 合法且有適當機會證明它有意義,編譯器才會為class 生出operator 建構函式 析構函式 stl 或標準庫或已經存在的,不包含虛函式的類,我們不應該繼承它們 比較好的一種辦法是,自己在析構函式中,可以選擇,記錄並退出,或者記錄並繼續執行。但同時提供乙個p...

構造 析構 賦值運算

條款05 了解c 默默編寫並呼叫哪些函式 如果我們寫了乙個空類 class empty 編譯器會為這個類新增一些default的函式,相當於 class empty default建構函式 empty const empty rhs copy建構函式 empty 析構函式 empty operato...

C 構造 析構 賦值運算

有時候,某個物件是獨一無二的,不能沒複製也不能被賦值!所以我們要強制編譯器不允許使用 和copy 建構函式,但如果你不寫他們,編譯器又會自動幫你加上,問題由此引發。class home uncopyable private uncopyable const uncopyable uncopyable...