歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中的默認函數與default和delete用法

C++中的默認函數與default和delete用法

日期:2017/3/1 9:44:45   编辑:Linux編程

一、類中的默認函數

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

Copyright © Linux教程網 All Rights Reserved