4

この質問に対するドロンの答えについて話し合っていたところ、

[one] はおそらく、C++ 標準ライブラリが内部で malloc を使用するために new を定義していることに気付くでしょう。

これが本当かどうか疑問に思っています。C++ 標準はnew使用を定義していますmallocか?

4

4 に答える 4

7

C ++標準はmallocを使用するために新しいものを定義していますか?

C ++標準( C ++言語を定義する標準ドキュメントを意味します)はoperator new、に関して定義していませんmalloc()。ただし、 C++標準ライブラリのほとんどの実装malloc()がメモリの割り当てに使用することはもっともらしいです。

C ++11規格の18.6.1.1/4項による(約operator new):

デフォルトの動作

  • ループを実行します。ループ内で、関数は最初に要求されたストレージの割り当てを試みます。試行に標準Cライブラリ関数の呼び出しが含まれるかどうかmallocは指定されていません。
于 2013-03-12T19:28:58.593 に答える
2

C++ 標準では、malloc を使用するために new が定義されていますか?

いいえ、多くの実装はデフォルトのnew実装に対してそれを行いますが ( と に分離されたヒープを提供することはあまり意味がありませんmalloc) new

また、によって使用されるアロケータ関数はカスタマイズ可能です (§3.7.4.1 を参照)。そのため、特定の実装であっても、malloc`newを仮定するのは特に間違っています。new' will always call

于 2013-03-12T19:28:11.040 に答える
1

いいえ、mallocメモリを割り当てるだけです。ただし、newメモリを割り当て、コンストラクターを呼び出します(必要な場合)。

あなたの実装のある部分で、メモリアロケータのようなメカニズムnewを見つけるかもしれません。malloc

于 2013-03-12T19:29:32.237 に答える
-1

mallocコンストラクタを認識しておらず、メモリのチャンクを宣言するよりも少し余分に必要なので、そうは思いません

于 2013-03-12T19:29:56.223 に答える