新しい演算子は、ヒープメモリの連続チャンクを割り当てることが保証されていますか?つまり、
objects=new Base[1024];
メモリ割り当てに関しては、
objects=(Base*)malloc(1024*sizeof(base));
またはギャップがある可能性がありますか?
はい、メモリは継続的になります。割り当てに関しては、バージョンと同じmalloc
ですが、いくつかの違いがあります(コンストラクターの呼び出し、返さnew
ない、例外をスローしないなど)。NULL
malloc
new[]
またはと混同することはできないことに注意してくださいdelete
。メモリを解放するfree
ために使用する必要があります。delete[] objects
多分。演算子は2つのnew
ことを行います。operator new
関数を呼び出します。この関数は、考えられるすべてのタイプに対して適切に配置された、連続したメモリブロックを返します(そうでない場合を除きます。たとえば、誤って配置された新しい配置など)。次に、オブジェクトのコンストラクターを呼び出します。コンストラクターは、ほぼすべてのことを実行できます。最初のブロックと隣接しない追加のブロックの割り当てを含みます。
演算子がオーバーロードされていない場合new
、はい、割り当てられたメモリブロックは連続しています。しかし、それが過負荷になっている場合、私たちは知ることができません(一部の邪悪なプログラマーがそれを過負荷にした可能性がありますか?:D)