一、類中的默認函數
a.類中默認的成員函數
1.默認構造函數
2.默認析構函數
3.拷貝構造函數
4.拷貝賦值函數
5.移動構造函數
6.移動拷貝函數
b.類中自定義的操作符函數
1.operator
2.operator&
3.operator&&
4.operator*
5.operator->
6.operator->*
7.operator new
8.operator delete
同時C++規定,一旦程序員實現了這些函數的自定義版本,則編譯器不會再自動生產默認版本。注意只是不自動生成默認版本,當然還是可手動生成默認版本的。當我們自己定義了待參數的構造函數時,我們最好是聲明不帶參數的版本以完成無參的變量初始化,此時編譯是不會再自動提供默認的無參版本了。我們可以通過使用關鍵字default來控制默認構造函數的生成,顯式地指示編譯器生成該函數的默認版本。比如:
class MyClass
{
public:
MyClass()=default; //同時提供默認版本和帶參版本,類型是POD的
MyClass(int i):data(i){}
private:
int data;
};
有些時候我們希望限制默認函數的生成。典型的是禁止使用拷貝構造函數,以往的做法是將拷貝構造函數聲明為private的並不提供實現,這樣當拷貝構造對象時編譯不能通過,C++11則使用delete關鍵字顯式指示編譯器不生成函數的默認版本。比如:
class MyClass
{
public:
MyClass()=default;
MyClass(const MyClass& )=delete;
......
}
當然,一旦函數被delete過了,那麼重載該函數也是非法的,該函數我們習慣上稱為刪除函數。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-05/101437p2.htm