Share via


特殊成員函式

特殊成員函 式是類別(或結構)成員函式,在某些情況下,編譯器會自動為您產生。 這些函式是預設建 構函式、解構函式、 複製建構函 式和複製指派運算子 ,以及 移動建構函式和移動指派運算子 。 如果您的類別未定義一或多個特殊成員函式,則編譯器可能會隱含宣告及定義所使用的函式。 編譯器產生的實作稱為 預設 特殊成員函式。 如果不需要函式,編譯器就不會產生函式。

您可以使用 = default 關鍵字,明確地宣告預設特殊成員函 式。 這只會讓編譯器在必要時定義函式,就像完全未宣告函式一樣。

在某些情況下,編譯器可能會產生 已刪除 的特殊成員函式,這些函式未定義,因此無法呼叫。 如果類別上的特定特殊成員函式呼叫沒有意義,則這可能會發生此情況,因為類別的其他屬性。 若要明確防止自動產生特殊成員函式,您可以使用 = delete 關鍵字將其宣告為已刪除

只有在您尚未宣告任何其他建構函式時,編譯器才會 產生預設建構函式,此建構 函式不接受任何引數。 如果您只宣告接受參數的建構函式,則嘗試呼叫預設建構函式的程式碼會導致編譯器產生錯誤訊息。 編譯器產生的預設建構函式會執行物件的簡單成員預設 初始化 。 預設初始化會讓所有成員變數處於不確定狀態。

預設解構函式會執行 物件的成員型解構。 只有在基類解構函式是虛擬時,它才會是虛擬的。

預設複製和移動建構和指派作業會執行成員位模式複製或移動非靜態資料成員。 只有在未宣告解構函式或移動或複製作業時,才會產生移動作業。 只有在未宣告任何複製建構函式時,才會產生預設複製建構函式。 如果宣告移動作業,則會隱含刪除。 只有在未明確宣告複製指派運算子時,才會產生預設複製指派運算子。 如果宣告移動作業,則會隱含刪除。

另請參閱

C++ 語言參考