歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

一、類中的默認函數
 
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