淺析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) -- 它是已刪除的函式"
相關文章
- 淺析package.json中的devdependencies 和 dependenciesPackageJSONdev
- 淺析mybatis中${}和#{}取值區別MyBatis
- 淺析Spring的IoC和DISpring
- 淺析IOC 和 DI
- 淺析TCP和nodejs中TCP的簡單應用TCPNodeJS
- 淺析nodejs中的stream(流)NodeJS
- 淺析 JS 中的 Event LoopJSOOP
- 淺析java中的IO流Java
- react中 受控元件和 非受控元件 淺析React元件
- 淺談C++11中的多執行緒(三)C++執行緒
- 淺談C++11中的多執行緒(一)C++執行緒
- 淺析Convert,Parse和TryParse
- 淺析 Vue 2.6 中的 nextTick 方法Vue
- 淺析vue中的元件通訊Vue元件
- java中的JAR檔案淺析JavaJAR
- 淺析js中的Object.create()JSObject
- redux中間鍵淺析Redux
- 淺析遊戲中的教程引導和章節連結遊戲
- 淺析InnoDB引擎的索引和索引原理索引
- .NET6中的await原理淺析AI
- Netty 中的記憶體分配淺析Netty記憶體
- 淺析Java中的執行緒池Java執行緒
- 淺析Vue 中 $nextTick 機制Vue
- -XX:PretenureSizeThreshold的預設值和作用淺析
- 淺析靜態IP的用途和優點
- JavaScript中的export、export default、exports和module.exports(export、export default、exports使用詳細)JavaScriptExport
- 淺析php中的異常與錯誤PHP
- 淺析MySQL事務中的redo與undoMySql
- 淺析Java併發中的單例模式Java單例模式
- Java 集合中的排序演算法淺析Java排序演算法
- laravel中delete()方法和destroy()方法的區別Laraveldelete
- 淺析Beautiful Soup庫和Lxml庫XML
- java閉包和回撥淺析Java
- 淺析HDFS架構和設計架構
- AnalyticDB實現和特點淺析
- iOS Block淺淺析iOSBloC
- 軟體測試中bug淺析
- 容器中Java 程式OOMKilled原因淺析JavaOOM