C++中 =default,=delete用法


=default: 用於顯式要求編譯器提供合成版本的四大函數(構造、拷貝、析構、賦值) 
例如:

class A{
public: A() = default; A(const A& a) = default; A& operator=(A&); ~A() = default; }

 

我們只能對具有合成版本的成員函數使用=default;

=delete,用於定義刪除函數,在舊標准下,我們如果希望阻止拷貝可以通過顯式聲明拷貝 
構造函數和拷貝賦值函數為private,但新標准下允許我們定義刪除函數,例如:

struct NoCopy{ NoCopy() = default; NoCopy(const NoCopy&) = delete; // 阻止拷貝 NoCopy& operator=(const NoCopy&) = delete; //阻止賦值 ~NoCopy() = default; }

 

=delete可以告知編譯器,不生成默認的這些成員。 
這里有兩點要注意: 
1、=delete可以使用在任意的函數上(可以引導函數匹配過程),除了析構函數(析構函數為刪除函數將 
導致該類型無法銷毀);=default必須用在有默認合成函數的函數上。 
2、=delete必須出現在函數第一次聲明的時候。

 

參考:https://blog.csdn.net/u010640235/article/details/51286445


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM