拷貝構造(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...