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