C++11 標準新特性:Defaulted 和 Deleted 函式
阿新 • • 發佈:2021-06-18
C++11 標準新特性:Defaulted 和 Deleted 函式(轉)
C++ 的類有四類特殊成員函式,它們分別是:預設建構函式、解構函式、拷貝建構函式以及拷貝賦值運算子。
=default
程式設計師只需在函式聲明後加上“=default;
”,就可將該函式宣告為 defaulted 函式,編譯器將為顯式宣告的 defaulted 函式自動生成函式體。例如:
class X{ public: X()=default; X(int i){ a = i; } private: int a; }; X x;
編譯器會自動生成預設建構函式X::X(){}
=delete
程式設計師只需在函式聲明後加上“=delete;
”,就可將該函式禁用。
雖然只顯式的禁用了一個拷貝建構函式和一個拷貝賦值操作符,但是由於編譯器檢測到類X
存在使用者自定義的拷貝建構函式和拷貝賦值操作符的宣告,所以不會再隱式的生成其它引數型別的拷貝建構函式或拷貝賦值操作符,也就相當於類X
沒有任何拷貝建構函式和拷貝賦值操作符,所以物件間的拷貝和賦值被完全禁止了。
class X{ public: X(); X(const X&) = delete; // 宣告拷貝建構函式為 deleted 函式 X& operator = (const X &) = delete; // 宣告拷貝賦值操作符為 deleted 函式 }; int main(){ X x1; X x2=x1; // 錯誤,拷貝建構函式被禁用 X x3; x3=x1; // 錯誤,拷貝賦值操作符被禁用 }