现在的位置: 首页 > 综合 > 正文

Effective C++之六

2013年10月01日 ⁄ 综合 ⁄ 共 663字 ⁄ 字号 评论关闭

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

     条款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的类,实现该功能。

   

【上篇】
【下篇】

抱歉!评论已关闭.