新しい演算子は、連続したヒープメモリを割り当てることを保証していますか?私。C++の新しい演算子 - メモリのレイアウト
objects=(Base*)malloc(1024*sizeof(base));
又はギャップが存在することができると同じメモリ割当ての観点
objects=new Base[1024];
ですか?
新しい演算子は、連続したヒープメモリを割り当てることを保証していますか?私。C++の新しい演算子 - メモリのレイアウト
objects=(Base*)malloc(1024*sizeof(base));
又はギャップが存在することができると同じメモリ割当ての観点
objects=new Base[1024];
ですか?
はい、メモリは連続しています。割り当てに関しては、malloc
と同じですが、いくつかの相違点があります(コンストラクタへの呼び出し、new
はNULL
を返しません。malloc
は例外をスローしませんなど)。
delete
またはfree
と混在させることはできませんので、メモリを解放するにはdelete[] objects
を使用する必要があります。
多分。 new
演算子は、operator new
関数を呼び出します。これは連続したメモリブロックを返し、可能なすべての型に対して適切に整列されます(ただし、そうでない場合を除き、新しい誤った配置など)。次に、オブジェクトのコンストラクタを呼び出します。オブジェクトのコンストラクタは、何かを行うことができます。最初のブロックと連続しない追加のブロックを割り当てることを含みます。
new
演算子がオーバーロードされていない場合、割り当てられたメモリブロックは連続しています。しかし、それが過負荷になると、私たちは知ることができません(いくつかの邪悪なプログラマーがそれを過負荷にしているかもしれません):
全く同じではありません。 'new []'バージョンは各オブジェクトのデフォルトコンストラクタを呼び出します。 –
@ edA-qamort-ora-yこれは私が言ったことです... –
申し訳ありません、私は今日盲目です。しかし、新しいバージョンでは、配列のサイズを記憶するために少し余分なスペースが割り当てられるので、 'delete []'は正しい数のデストラクタを呼び出すことができます。もちろん、それは空間の小さな違いです。 –