技术
将构造函数和非成员函数虚化
CRE:没有真正的所谓virtual构造函数和virtual非成员函数(编译不通过),只是用其他方式实现。
虚化构造函数:定义一个普通函数,根据参数来生成对应类型的对象。由于它产生新对象,就像一个构造函数,但是他能产生不同类型的对象。(CRE:类似简单工厂模式)
虚化非成员函数:写一个虚函数做实际工作,再定义非成员函数,只负责调用虚函数。
限制某个class所能产生的对象数量
- 允许零个或一个对象
- 将构造函数声明为private,压制对象的产生。
- 定义一个函数用于生产对象,使用local static形式声明单例。
最好不要使用inline搭配local-static,会导致static对象连同函数一起被复制。特别是旧版的编译器,新的C++标准已经消除这个问题。
- 限制对象数量
在类中声明一个private的静态变量记录当前对象数量。
要求或禁止对象产生于heap之中
- 强制对象产生在heap中
将构造函数和析构函数声明为private,然后定义create()
和destroy()
接口。(只把析构函数声明为private也可以)
- 判断某个对象是否位于heap内
CRE:重载operator new
和operator delete
。记录分配行为。
- 禁止对象产生于heap中
CRE:把operator new
和operator delete
声明为private或者delete。
智能指针和引用计数
《More Effective C++》p159-p213
(END)