C++編譯器會自動生成哪些函數
如何不想要上面那些編譯器自動生成的函數
好比我想實現單例模式html
傳統方法c++
- 將構造函數聲明成private類型:爲什麼聲明成了private後就能實現單例模式呢
C++11作法shell
- C++引入了兩個指示符:
delete
和default
- 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