-1

我写了一个函数myDelete做类似的事情delete

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

4

1 回答 1

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

这假设 p 指向用 new 分配的不是数组的东西。

于 2013-08-19T03:22:33.637 回答