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運算子安全釋放資源
留言列表