昨天看了一下除颤的代码,发现里面类的框架里有一个NoCopy(类似名字)的类,将拷贝构造函数和赋值运算符声明为私有的,那么继承于这个类的派生类也不能被克隆,注释中强调要私有继承,其实如何继承都可以,只要派生类不在public部分重新定义拷贝构造函数和赋值运算符就可以,另外也不必单独写一个类,这个声明写到基类就可以了。
看到这个我又想到一些类似的小技巧,比如单件模式,其实就是将缺省构造函数声明为私有,以限制实例化。例如还有:
1、强制必须动态分配,可以将析构函数声明为私有,同时提供free方法(因为不能delete)。
2、禁止动态分配,将new方法声明为私有。
3、禁止继承,继承一个类(最好虚继承),这个类的构造函数是私有的,并且它的友元类是派生类。这个比较复杂,代码示例如下
class final{
friend class MyTest;
private:
final(){};
};
class MyTest : public virtual final{
public:
MyTest(){};
};
这样就实现了Java的Final功能。