-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 に答える