淺析c++11中的“=default“和“=delete“
c++11之前,如果我們想禁止類的拷貝行為,需要將拷貝建構函式和拷貝賦值函式宣告為私有的,只允許友元或者成員可以訪問。程式碼如下:
class noncopyable
{
public:
noncopyable() {};
private:
noncopyable(const noncopyable&);
noncopyable& operator=(const noncopyable&);
};
c++11提供了"=delete"顯式禁止類的拷貝,"=default"顯式生成預設函式,程式碼如下:
class noncopyable
{
public:
noncopyable() = default;
noncopyable(const noncopyable&) = delete;
noncopyable& operator=(const noncopyable&) = delete;
};
說明:
1) 如果顯式宣告瞭建構函式,如"noncopyable() = default;",則編譯器不會自動生成預設建構函式,同理適用於虛解構函式、拷貝建構函式、拷貝賦值函式;
2) delete的應用舉例
class A
{
public:
void test(int) {}
void test(double) = delete;
};
int main()
{
A a;
a.test(1);
a.test(1.0); //error
system("pause");
return 0;
}
定義一個簡單的類A,其中test(double) = delete; 則類A的物件在呼叫A::test(2.0)時報錯,編譯器提示"無法引用 函式 "A::test(double)" (已宣告 所在行數:22) -- 它是已刪除的函式"
相關文章
- angular中的概念和原理淺析Angular
- 淺析mybatis中${}和#{}取值區別MyBatis
- 淺析C#中的等號“==”和EqualsC#
- C++11新關鍵字defaultC++
- 淺析package.json中的devdependencies 和 dependenciesPackageJSONdev
- 淺析java中的IO流Java
- 淺析 JS 中的 Event LoopJSOOP
- LINUX 中的mmap淺析Linux
- react中 受控元件和 非受控元件 淺析React元件
- 淺談C++11中的多執行緒(一)C++執行緒
- 淺談C++11中的多執行緒(三)C++執行緒
- 淺析nodejs中的stream(流)NodeJS
- 淺析js中的Object.create()JSObject
- java中的JAR檔案淺析JavaJAR
- 淺析vue中的元件通訊Vue元件
- java中的反射機制淺析Java反射
- 淺析遊戲中的教程引導和章節連結遊戲
- 淺析TCP和nodejs中TCP的簡單應用TCPNodeJS
- RMAN 中delete exipired 和 delete obsolete 的區別delete
- redux中間鍵淺析Redux
- rman 中的 delete all input 和 delete input 的區別delete
- 淺析Spring的IoC和DISpring
- Delete Default Resou in GI and Why is Some Reso Offline by Default?_1372374.1delete
- 淺析Java中的執行緒池Java執行緒
- 淺析InnoDB引擎的索引和索引原理索引
- Oracle中truncate和delete的區別Oracledelete
- C++11 中的 Defaulted 和 Deleted 函式C++delete函式
- Netty 中的記憶體分配淺析Netty記憶體
- 淺析 Vue 2.6 中的 nextTick 方法Vue
- 淺析Java併發中的單例模式Java單例模式
- 淺析php中的異常與錯誤PHP
- 淺析MySQL事務中的redo與undoMySql
- .NET6中的await原理淺析AI
- Java 集合中的排序演算法淺析Java排序演算法
- 淺析tornado 中demo的 blog模組
- 淺析Android中的訊息機制Android
- 淺析Linux的軟中斷的實現Linux
- 淺析靜態IP的用途和優點