昨天看了一下除顫的代碼,發(fā)現(xiàn)里面類的框架里有一個NoCopy(類似名字)的類,將拷貝構(gòu)造函數(shù)和賦值運(yùn)算符聲明為私有的,那么繼承于這個類的派生類也不能被克隆,注釋中強(qiáng)調(diào)要私有繼承,其實(shí)如何繼承都可以,只要派生類不在public部分重新定義拷貝構(gòu)造函數(shù)和賦值運(yùn)算符就可以,另外也不必單獨(dú)寫一個類,這個聲明寫到基類就可以了。
看到這個我又想到一些類似的小技巧,比如單件模式,其實(shí)就是將缺省構(gòu)造函數(shù)聲明為私有,以限制實(shí)例化。例如還有:
1、強(qiáng)制必須動態(tài)分配,可以將析構(gòu)函數(shù)聲明為私有,同時提供free方法(因?yàn)椴荒躣elete)。
2、禁止動態(tài)分配,將new方法聲明為私有。
3、禁止繼承,繼承一個類(最好虛繼承),這個類的構(gòu)造函數(shù)是私有的,并且它的友元類是派生類。這個比較復(fù)雜,代碼示例如下
class final{
friend class MyTest;
private:
final(){};
};
class MyTest : public virtual final{
public:
MyTest(){};
};
這樣就實(shí)現(xiàn)了Java的Final功能。