new
「 」と「malloc
」と「 」と「 」と「 」の違いは何calloc
ですか?
(いつ) 「 」以外に何か必要new
ですか?
それらの1つは他のものを使用して実装されていますか?
new
「 」と「malloc
」と「 」と「 」と「 」の違いは何calloc
ですか?
(いつ) 「 」以外に何か必要new
ですか?
それらの1つは他のものを使用して実装されていますか?
new
およびdelete
C++ 固有の機能です。それらは C にmalloc
は存在しませんでした。古い学校の C のやり方です。ほとんどの場合、C++ で使用する必要はありません。
malloc
初期化されていないメモリを割り当てます。割り当てられたメモリは、で解放する必要がありfree
ます。calloc
に似malloc
ていますが、割り当てられたメモリを定数 (0) で初期化します。で解放する必要がありますfree
。new
コンストラクターを呼び出して、割り当てられたメモリを初期化します (オブジェクトの場合)。で割り当てられたメモリは、new
で解放する必要がありますdelete
(これにより、デストラクタが呼び出されます)。必要なサイズを手動で指定して、適切な型にキャストする必要はありません。したがって、より現代的でエラーが発生しにくくなっています。new
/ delete
+ new[]
/ delete[]
:
new
/delete
は、メモリを割り当て、ヒープからメモリを解放する C++ の方法です。new[]
これは、delete[]
連続したメモリの配列を割り当てる C++ の方法です。malloc
realloc
placement new を使用してデータの同じバッファーを再利用できますnew
、解放したりすることはできませfree
ん。delete[]
malloc
/ free
+ 家族:
malloc
/ free
/family は、ヒープからメモリを割り当てて解放する C の方法です。calloc
と同じですがmalloc
、メモリも初期化しますmalloc
delete や delete[] でデータを割り当てたり解放したりすることはできませんここで私の関連する回答も参照してください
new
ctor (順序は指定されていません) を割り当てて呼び出しdelete
、dtor を割り当てて、new の呼び出しによって割り当てられたメモリを解放します。malloc
一部のメモリのみを割り当て、free
によって割り当てられたメモリを削除しますmalloc
new
を使用して実装できますmalloc
(標準では必須ではありません)calloc
と同じことをmalloc
行い、新しく割り当てられたメモリをゼロ初期化します他の投稿が指摘しているように: malloc
/free
は C と互換性を持たせるために C++ の一部です。
新しいもの以外は必要ありません。これは、C++ の malloc を完全に置き換えるものです。
違いについては、 Malloc はメモリを割り当てるだけです。新しく割り当てられたメモリとコンストラクターの呼び出し。同様に、 free はメモリを解放するだけです。Delete はメモリを解放し、デストラクタを呼び出します。
警告の言葉: 2 つのイディオムを混同しないでください。結果は未定義です。
new を使用すると、新しく割り当てられたメモリでコンストラクターが呼び出されます。割り当てられるものにコンストラクタがない場合、new は機能的に malloc と同じです。通常はそれを参照して使用する必要があります。
new は、malloc に関して実装される場合と実装されない場合があります。C++ 標準では、どちらの方法も必要ありません。
私が思い出せる new と malloc の主な違いは、realloc を使用して new によって割り当てられたメモリを再割り当てできないことです。そのため、メモリ ブロックのサイズを増減したい場合は、新しいブロックを割り当ててすべてをコピーする必要がありました。
Calloc を使用すると、割り当てたメモリ ブロックを初期化できますが、malloc では初期化できません。
オブジェクトを新規作成すると、オブジェクトのスペースが割り当てられるだけでなく、オブジェクトのコンストラクターが呼び出されます。しかし、これは C++ の方法であり、mallocはCでメモリを割り当てる古いバージョンの方法です。callocはmallocと同じですが、メモリをすべてのビット 0 にクリアする点が異なります。