4

次のように書いてプログラムを実行するとどうなるかお聞きしたいです。

new int[5]; // without assigning it to a pointer.

コンパイルは通りました。

しかし、5 * sizeof(int)割り当てられたメモリのチャンクはありますか?

それが物体だったら?

new some_obj_[5]; // without assigning it to a pointer.

のコンストラクターはsome_obj_呼び出されますか?

4

3 に答える 3

8
new int[5];//without assigning it to a pointer.

はい、5*sizeof(int)メモリのチャンクが割り当てられますが、ポインターを保存していないため、アクセスできません。メモリリークが発生します。

new some_obj_[5];//without assigning it to a pointer.

はい、5*sizeof(some_obj_)ポインタを保存しなかったため、メモリのチャンクが割り当てられますが、アクセスできなくなります。のデフォルトのコンストラクターはsome_obj_5 回呼び出されます。それを確認するのは簡単です。コーディング方法によってsome_obj_は、メモリ リークが発生する可能性があります。

于 2013-01-30T22:18:00.387 に答える
3

はい、オブジェクトの配列は動的に割り当てられ、2番目のケースではデフォルトのコンストラクターsome_obj_が呼び出されます。ポインタを格納しないため、オブジェクトまたはdelete[]配列にアクセスする方法が失われ、メモリリークが発生します。

于 2013-01-30T22:17:43.167 に答える
1
new int[5];//without assigning it to a pointer.

しかし、5-sizeof(int) のメモリ チャンクが割り当てられるのでしょうか?

YES、メモリの 5-sizeof(int) チャンクが割り当てられ、5 つの int は 0 に初期化されていません

それが物体だったら?

new some_obj_[5];//without assigning it to a pointer.
Will the constructor of 'some_obj_' be invoked?

はいsizeof(some_obj_) * 5メモリ ブロックが割り当てられ、some_obj_ のデフォルト コンストラクタが 5 回呼び出されて各要素が初期化されます。

これらのメモリを指すポインターがないため、これらのメモリをリークしていますdelete []。メモリブロックの割り当てを解除するために呼び出すことはできません。

新しい [] wiki ページを参照

于 2013-01-30T22:37:20.600 に答える