close

class INetTool
{
public:
    virtual ~INetTool(){};

    virtual string onHttpGet(const char *const url)=0;
    virtual string onHttpPost(const char *const url, const char *const request)=0;
    virtual bool onDownload(const char *const url, const char *const savePath)=0

};

 

class HttpToolA : public INetTool

{ int value; }

class HttpToolB : public INetTool

{ float value[10]; }

class HttpToolC : public INetTool

{ double value[100]; }

 

 

問: 為何上述虛擬解構式是一定要的?

答: 因為你會這樣做

INetTool *const a = new HttpToolA();

INetTool *const b = new HttpToolB();

INetTool *const c = new HttpToolC();

release(a);

release(b);

release(c);

 

// 哪個子類別傳進來?

// 你問我我問虛擬函式表

void release(INetTool *const tool)

{

   delete tool;

}

 

 

虛擬解構式會產生虛擬函式表

裡面含有足夠多的執行時期資訊

可以讓delete運算子安全釋放資源

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 gaussian1998 的頭像
    gaussian1998

    sean huang的部落格

    gaussian1998 發表在 痞客邦 留言(0) 人氣()