どのような場合に malloc や new を使うのでしょうか? 質問する

どのような場合に malloc や new を使うのでしょうか? 質問する

C++ では、データの割り当てと解放に複数の方法があり、呼び出すときは をmalloc呼び出す必要がありfreenew演算子を使用するときは とペアにする必要がありdelete、この 2 つを混在させるのは間違いであることは理解しています (例:演算子free()を使用して作成されたものを呼び出す)。しかし、実際のプログラムで/をいつ使用し、いつ/を使用する必要があるのnewか​​は明確ではありません。mallocfreenewdelete

C++ の専門家であれば、この点に関して従っている経験則や慣例を教えてください。

ベストアンサー1

C を使わざるを得ない場合を除いて、を使用しない mallocでください。常に を使用してくださいnew

大量のデータが必要な場合は、次のようにします。

char *pBuffer = new char[1024];

ただし、これは正しくないので注意してください。

//This is incorrect - may delete only one element, may corrupt the heap, or worse...
delete pBuffer;

代わりに、データの配列を削除するときは次のようにします。

//This deletes all items in the array
delete[] pBuffer;

キーワードは C++ の方法であり、これにより、型にと呼ばれるコンストラクターnewが確実に存在するようになります。キーワードはより型安全ですが、 はまったく型安全ではありません。newmalloc

使用するのが有益だと考えられる唯一の方法は、データのバッファのサイズを変更するmalloc必要がある場合です。キーワードには のような類似の方法はありません。関数を使用すると、メモリのチャンクのサイズをより効率的に拡張できる可能性があります。newreallocrealloc

new/freemalloc/を混在させることはできないことに注意してくださいdelete

注意: この質問の一部の回答は無効です。

int* p_scalar = new int(5);  // Does not create 5 elements, but initializes to 5
int* p_array  = new int[5];  // Creates 5 elements

おすすめ記事