私はしばらくの間pointer = new type[size]
を使用していましたが、最近はmalloc
が見つかりました。mallocとnewを使用する
malloc
とnew
の間に技術的な違いはありますか?もしそうなら、もう片方を使うことの利点は何ですか?
私はしばらくの間pointer = new type[size]
を使用していましたが、最近はmalloc
が見つかりました。mallocとnewを使用する
malloc
とnew
の間に技術的な違いはありますか?もしそうなら、もう片方を使うことの利点は何ですか?
malloc
は関数呼び出しです。この場合は新しい式です。
違いは次のとおりです。 new
はメモリを割り当て、その配列のすべての要素をデフォルトコンストラクタで構築します。 は、初期化されていないメモリのチャンクを返すだけです。
::operator new
は、std::bad_alloc
または新しいハンドラが登録されている場合はそれをスローします。
標準ライブラリでは、割り当てが失敗した場合に0ポインタを返すさらなるパラメータnothrow
を受け入れる新しいものを定義しています。あなたは、あなたの質問here
、別の良い答えでのFAQを見つけることができます
int *x = new(std::nothrow) int[20]; // include <new>, return 0 on failure
あなたは、私は約が、より良く、より速く両方だったものです。私はちょうど1つのことを見ている途中でした:私の記憶は正しいですか?C標準の古いバージョンでは、free(NULL)は未定義の効果を持っていますが、delete [] NULLは常に明示的に安全です。私はすぐにそれについての証拠を見つけることができないので、それが私の誤解であるかどうか疑問に思っています。 – Tommy
Tommy、IIRCフリー(0)が定義されています。私は古代版のCについては知らない); –
実際の仕様を持たずに、それがC99とおそらくC89にあると示唆しているので、潜在的な議論を無効にする以外の問題はないと考えているdelete []はfreeよりも安全です...新しい/ mallocの議論では、deleteとdeleteの区別を指摘する価値がありますか?メモリ割り当ての2つの方法の技術的な違いと同じです。 – Tommy