Effective C++之六

     要点:显示禁止不想使用的编译器合成函数

     条款5中叙述了编译器可能合成四类函数。在某些情况下,如作者例子中“要出售房屋”实例,不希望有Copy构造和赋值操作。补充例子:Singleton模式。

     有两种做法:

     1) 将Copy构造和赋值操作声明为private,不提供函数实现

         1.1 声明Copy构造和赋值操作后,编译器不会再合成

         1.2 声明为private,除成员和友元函数外,访问将产生编译错误

         1.3 不提供实现,确保即使成员或友元函数调用它们,也会产生链接错误

         1.4 仅声明不实现,参数列表中的参数名可省略。

     2) 从Uncopyable类private继承,该类用方式1)实现。

         2.1 编译器合成的子类Copy构造和赋值操作会调用基类对应的函数,由于基类对应函数是private,故会产生编译错误

         2.2 采用private继承。一般的,public继承描述is-a关系,private继承描述implement-by关系

         2.3 基类析构函数不是virtual的(参见条款7),原因是Uncopyable类设计意图不是作为多态基类使用

         2.4 由于Uncopyable不含成员变量,故编译器可能进行“空基类优化”(Empty Base Class Optimization),参见条款39

         2.5 Boost库中已经有一个名为noncopyable的类,实现该功能。

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值