《白话C++》第10章 Page18 10.2.1 non-copyable不可复制类

10.2.1 non-copyable

“面向对象”章节为了让某类对象不可被复制,方法是将其复制构造赋值操作符重载函数都声明为“=delete”,更早之前的做法则是将二者私有化。这些动作可以“模板化”,加引号是因为并不一定采用模板技术,而是想说明这类操作可以套某种特定模式以便快速实现

boost就为我们提供了“non-copyable”工具类:

从boost::noncopyable派生,只是为了让当前类拥有基类中已“私有化”的,或已声明为“被删除”的复制构造和赋值操作符重载,所以非常适合使用“私有派生”方式。

相比为每个不需要复制功能的类写下复制构造和赋值操作的“delete”声明,来自boost的noncopyable可以让我们写更少的代码,并且在语义上,“noncopyable”这个词表一更加清楚。不过,如果因此引入boost库,可能会感觉代价有点答,为什么不直接学着实现一个呢?

测试如下:

看着源代码有利于分析:当编译器试图产生ms2从ms复制构造时,需要生成复制其基类部分的代码(尽管基类没有任何成员数据)。于是发现基类禁止了复制行为,于是报错。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值