2013-08-19 104 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指向一个新的分配的东西,这不是一个数组。