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