C++11&14新标准—— =delete、=default
2023-12-13 17:44:05
系列文章目录
C++11&14新标准——Variadic templates(数量不定的模板参数)
C++11&14新标准——Uniform Initialization(统一初始化)、Initializer_list(初始化列表)、explicit
C++11&14新标准—— =delete、=default
1. =default
??default是C++11提出的新关键字,效果为获得一个系统默认的构造函数(内容为空),只能用在五大成员函数上,如果用在其他函数上,编译器会报错。
class Zoo{
public:
Zoo()=default; //默认构造函数
Zoo(const Zoo&)=default; //拷贝构造函数
Zoo(const Zoo&&)=default; //移动构造函数
Zoo& operator=(const Zoo&)=default; //移动构造函数
Zoo& operator=(const Zoo&&)=default; //移动构造赋值重载
private:
int d1;
int d2;
}
??对于构造函数来说,可以同时存在自定义构造函数和default构造函数,因为构造函数本来就可以有很多个;但对于剩下的四个函数来说,当有了自定义构造函数的时候,就不能再使用default,否则编译器将报错。
class Zoo{
public:
Zoo(int l1, int l2):d1(l1),d2(l2){};
Zoo()=default; //正确
Zoo(const Zoo& x):d1(x.d1),d2(x.d2){};
Zoo(const Zoo&)=default; // 报错!
Zoo& operator=(const Zoo&){
d1 = x.d1;
d2 = x.d2;
return *this;
}; //移动构造函数
Zoo& operator=(const Zoo&)=default;// 报错!
private:
int d1;
int d2;
}
技巧:如果一个类里面的成员包含指针对象,那么绝大部分都要自己定义构造函数,不能使用default;相反如果成员不包含指针,那么基本上都可以使用default构造函数;
2. delete
??delete的效果为该函数禁止使用,可以用在五大成员函数之外的其他函数上。
class Zoo{
public:
Zoo()=delete; //禁止默认构造函数
Zoo(const Zoo&)=delete; //禁止拷贝构造函数
Zoo(const Zoo&&)=delete; //禁止移动构造函数
Zoo& operator=(const Zoo&)=delete; //禁止移动构造函数
Zoo& operator=(const Zoo&&)=delete; //禁止移动构造赋值重载
private:
int d1;
int d2;
}
??可以将特定参数的构造函数delete,用于阻止该类初始化;也可以将所有的构造函数全部delete,这样使得该类成为一个静态类,无法实例化。
??将拷贝构造函数delete,会使得该类成为一个单例。也可以通过将拷贝构造函数定义为private,使得只有友元函数和该类的成员可以调用。
文章来源:https://blog.csdn.net/weixin_48956191/article/details/134972120
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!