0

重複の可能性:
delete[] は 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を使用する場合は、 ptr を削除します。operator new[]

最初の選択肢 (delete オブジェクト) では、delete のオペランドの値は、null ポインター値、前の new 式によって作成された非配列オブジェクトへのポインター、またはオブジェクトを表すサブオブジェクト (1.8) へのポインターである可能性があります。そのようなオブジェクトの基底クラス(第 10 節)。そうでない場合、動作は未定義です。

于 2012-07-27T06:21:57.167 に答える