2013-08-19 135 views
-1

我已經寫在做類似的事情功能myDeletedelete如何自定義C++刪除

template<typename T> 
void myDelete(T* p) 
{ 
    /* do something */ 
    p->~T(); 
    free(p); 
} 

但當參數p是一個指向基類(子對象),有錯誤時,調用free

測試代碼:

struct base0 
{ 
    int _; 
    virtual ~base0() {} 
}; 

struct base1 
{ 
    int _; 
    virtual ~base1() {} 
} 

struct dev : public base0, public base1 
{ 
    int _; 
    virtual ~dev() {} 
} 

base1* p = new dev(); 
myDelete(p);  // error, because p is adjust by base1 

如何寫函數myDelete

回答

0
template<typename T> 
void myDelete(T* p) 
{ 
    /* do something */ 
    delete p; 
} 

這假設p指向一個新的分配的東西,這不是一個數組。