C 隨筆之 拷貝控制

2021-08-11 05:28:11 字數 1112 閱讀 2113

拷貝建構函式

第乙個引數必須是引用型別。原因:如果引數不是引用型別 在呼叫拷貝建構函式時,一定會拷貝它的實參,如果要拷貝實參就必定會呼叫它的拷貝構造。那就會這樣無限迴圈下去。

拷貝構造函式呼叫的時期

1.用「=」定義變數

2.將乙個物件作為實參傳遞給乙個非引用型別的形參

3.從乙個返回值型別為非引用型別的函式返回乙個物件

4.{} 列表初始化乙個陣列中的元素或乙個聚合類中的成員

析構函式

不接收引數,不能被過載

按初始化順序的逆序銷毀

釋放物件在生存期分配的所有資源

需要析構函式的類也需要拷貝和賦值函式

需要拷貝操作的類也需要賦值操作,反之亦然

=default要求編譯器生成合成版本

=delete來阻止函式使用(構造、析構、拷貝、賦值、移動拷貝、移動賦值)

=delete必須出現在函式第一次宣告的時候

正常情況下析構函式不能是=delete的,因為這樣類物件就沒法釋放了

如果乙個類有資料成員不能預設構造、拷貝、複製或銷毀,則對應的成員函式將被定義為=delete

編譯器將合成成員定義為刪除函式發生在以下情況下:

1.類中某個成員的析構函式是=delete的或private的,則該類的合成析構函式、預設建構函式、合成拷貝建構函式 為=delete

2.類中某個成員的拷貝建構函式是=delete的或private的,則該類的合成拷貝構造為=delete

3.如果類內有引用或const成員且沒有類內初始化,且預設建構函式沒有=default,則預設建構函式為=delete

=運算子通常組合了析構函式和建構函式的操作

c 之拷貝控制

三五法則 阻止拷貝 定義行為像值的類 定義行為像指標的類 交換操作 物件移動 當定義乙個類時,我們顯式地或隱式地在此型別的物件拷貝 移動 複製和銷毀時做什麼。乙個類通過定義五種特殊的成員函式來控制這些操作,包括 class foo 拷貝建構函式的第乙個引數必須是乙個引用型別,雖然我們可以定義乙個接受...

C 拷貝控制

本文主要討論c 類定義中的拷貝控制 copy control 拷貝建構函式 賦值操作符和析構函式。如果文中有錯誤或遺漏之處,敬請指出,謝謝!c 類中有四個不可或缺的部分,那就是建構函式 拷貝建構函式 賦值操作符和析構函式。如果類中沒有定義這些函式,那麼編譯器將為類自動生成這些函式。當然,你也可以通過...

C 拷貝控制

當定義乙個類時,顯示或隱式地指定了此型別的物件在拷貝 賦值和銷毀時所執行的操作,通過三個特殊的成員函式來控制這些操作,分別是拷貝建構函式,賦值運算子和析構函式。拷貝建構函式定義了當使用同型別的另乙個物件初始化新物件時的操作,賦值運算子定義了將乙個物件賦值給同型別的另乙個物件時的操作,析構函式定義了此...