zhouqijie

技术



将构造函数和非成员函数虚化

CRE:没有真正的所谓virtual构造函数和virtual非成员函数(编译不通过),只是用其他方式实现。

虚化构造函数:定义一个普通函数,根据参数来生成对应类型的对象。由于它产生新对象,就像一个构造函数,但是他能产生不同类型的对象。(CRE:类似简单工厂模式)

虚化非成员函数:写一个虚函数做实际工作,再定义非成员函数,只负责调用虚函数。



限制某个class所能产生的对象数量

  1. 将构造函数声明为private,压制对象的产生。
  2. 定义一个函数用于生产对象,使用local static形式声明单例。

最好不要使用inline搭配local-static,会导致static对象连同函数一起被复制。特别是旧版的编译器,新的C++标准已经消除这个问题。

在类中声明一个private的静态变量记录当前对象数量。



要求或禁止对象产生于heap之中

将构造函数和析构函数声明为private,然后定义create()destroy()接口。(只把析构函数声明为private也可以)

CRE:重载operator newoperator delete。记录分配行为。

CRE:把operator newoperator delete声明为private或者delete。



智能指针和引用计数

《More Effective C++》p159-p213

(END)