C++ では、データの割り当てと解放に複数の方法があり、呼び出すときは をmalloc
呼び出す必要がありfree
、new
演算子を使用するときは とペアにする必要がありdelete
、この 2 つを混在させるのは間違いであることは理解しています (例:演算子free()
を使用して作成されたものを呼び出す)。しかし、実際のプログラムで/をいつ使用し、いつ/を使用する必要があるのnew
かは明確ではありません。malloc
free
new
delete
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
が確実に存在するようになります。キーワードはより型安全ですが、 はまったく型安全ではありません。new
malloc
使用するのが有益だと考えられる唯一の方法は、データのバッファのサイズを変更するmalloc
必要がある場合です。キーワードには のような類似の方法はありません。関数を使用すると、メモリのチャンクのサイズをより効率的に拡張できる可能性があります。new
realloc
realloc
new
/free
とmalloc
/を混在させることはできないことに注意してください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