【C++11】Delete和Default指示符.md

C++編譯器會自動生成哪些函數

  • 構造函數
  • 拷貝構造函數
  • 析構函數
  • 賦值函數

如何不想要上面那些編譯器自動生成的函數

好比我想實現單例模式html

傳統方法c++

  • 將構造函數聲明成private類型:爲什麼聲明成了private後就能實現單例模式呢

C++11作法shell

  • C++引入了兩個指示符:deletedefault
  • delete:告訴編譯器不自動產生這個函數
  • default:告訴編譯器產生一個默認的

C++11中必定須要default麼

由於不寫default時,c++編譯器是會自動生成構造函數的函數

  • 只要定義了一個構造函數,編譯器就不會再給生成一個默認的了。爲了讓默認的和自定義的構造函數共存,才引入這個參數
struct SomeType
{
    SomeType() = default; // 使用編譯器生成的默認構造函數
    SomeType(OtherType value);
};

delete指示符的兩個其它用處

  • 讓你的對象只能生成在棧內存上(這點我還不太能理解)
struct NonNewable {
    void *operator new(std::size_t) = delete;
};
  • 阻止函數的其形參的類型調用:(若嘗試以 double 的形參調用 f(),將會引起編譯期錯誤, 編譯器不會自動將 double 形參轉型爲 int 再調用f(),若是傳入的參數是double,則會出現編譯錯誤)
void f(int i);
void f(double) = delete;

文章出處

  • http://coolshell.cn/articles/5265.html
相關文章
相關標籤/搜索