C++中default与delete

前言

偶然间看到别人写的代码有这么一小片段

Q_DISABLE_COPY(类名)

然后再往里追踪

#define Q_DISABLE_COPY(Class) \
		Class(const Class &) Q_DECL_EQ_DELETE; \
		Class & operator=(const Class &) Q_DECL_EQ_DELETE; 

而Q_DECL_EQ_DELETE

#ifdef Q_COMPLILER_MEMBERS
#define Q_DECL_EQ_DELETE = delete
#else
#define Q_DECL_EQ_DELETE
#endif

本质就是说 Q_DISABLE_COPY 相当于在申明类中将其拷贝构造函数,复制运算符重载函数后面 = delete;

default 是如下

#ifdef Q_COMPLILER_MEMBERS
#define Q_DECL_EQ_FDEFAULT = default
#else
#define Q_DECL_EQ_FDEFAULT 
#endif

delete default 目的

delete 如字面意思是删除的意思, 声明表示该函数不能被调用 ,否则会在编译报出尝试引用已删除的函数。

class Test1
{
	Test1& operator=(const Test1&) = delete; 
};
Test1 test1;
Test1 test2;
test1 = test2;
编译时候会报C2280: 尝试引用已删除的函数。

回到最初的问题 ,如果想要产生一个类不能被复制,被拷贝一般会将其在私有声明如下。

pirvate:
Q_DISABLE_COPY(类名)

再说 default
字如其意 就是声明调用默认的函数。
因为C++规定,一旦实现了这些函数的自定义版本,则编译器不会再自动生产默认版本。注意只是不自动生成默认版本,当然还是可手动生成默认版本的。当我们自己定义了待参数的构造函数时,我们最好是声明不带参数的版本以完成无参的变量初始化,此时编译是不会再自动提供默认的无参版本了。我们可以通过使用关键字default来控制默认构造函数的生成,显式地指示编译器生成该函数的默认版本。

参考博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值