次のように書いてプログラムを実行するとどうなるかお聞きしたいです。
new int[5]; // without assigning it to a pointer.
コンパイルは通りました。
しかし、5 * sizeof(int)
割り当てられたメモリのチャンクはありますか?
それが物体だったら?
new some_obj_[5]; // without assigning it to a pointer.
のコンストラクターはsome_obj_
呼び出されますか?
次のように書いてプログラムを実行するとどうなるかお聞きしたいです。
new int[5]; // without assigning it to a pointer.
コンパイルは通りました。
しかし、5 * sizeof(int)
割り当てられたメモリのチャンクはありますか?
それが物体だったら?
new some_obj_[5]; // without assigning it to a pointer.
のコンストラクターはsome_obj_
呼び出されますか?
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_
は、メモリ リークが発生する可能性があります。
はい、オブジェクトの配列は動的に割り当てられ、2番目のケースではデフォルトのコンストラクターsome_obj_
が呼び出されます。ポインタを格納しないため、オブジェクトまたはdelete[]
配列にアクセスする方法が失われ、メモリリークが発生します。
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 ページを参照