0

可能重复:
delete[] 是否等于删除?

int main()
{
    char *ptr = new char[10];

    delete ptr;  // or delete [] ptr;
}

delete []是针对数组的,delete是针对单个对象的,对吧?所以,它应该delete [] ptr;在上面的代码中,但它似乎delete ptr;也可以。诡异的?

而且,

int main()
{
    int x;
    cin >> x;
    char *ptr = new char[x];  //cannot make sure whether it is a char pointer or a pointer to an array, right?
    // delete ptr, or delete [] ptr;
}
4

1 回答 1

0

正确的。operator delete使用时删除 ptroperator new[]是未定义的行为。

在第一种选择(删除对象)中,delete 的操作数的值可以是空指针值,指向由先前的 new 表达式创建的非数组对象的指针,或指向表示 a 的子对象 (1.8) 的指针这种对象的基类(第 10 条)。如果不是,则行为未定义。

于 2012-07-27T06:21:57.167 回答