虛構造函數與虛析構函數

虛構造函數:構造函數不可以是虛的,要構造一個對象必須掌握所創建的對象的確切類型,不過它所想達到的效果是可以變相實現。

方法一:創建有關類型的新對象

class Base

{

public:

    Base(); //默認構造

    Base(const Base&); //賦值構造

 

    virtual Base* createNewInstance(){ return new Base(); }

}

class Derived

{

public:

    Derived();

    Derived(const Derived&);

 

    Derived* createNewInstance(){ return new Derived(); }

}

void func(Base* p)

{

    Base* pp = p->createNewInstance();

    //...

}

 

方法二:抽象工廠,具體就不展開了(可以去參閱設計模式的有關書籍)。

 

 

虛析構函數:用一個基類的指針刪除一個派生類的對象時,派生類的析構函數會被調用,用於基類定義中。

例如基類定義new和delete操作符用到size_t參數時

class base

{

//...

public

//...

void * operate new(size_t);

}

void* base::operate new(size_t s)

{

//分配s個字符,返回一個到它的指針

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章