I:Cは、このライン何の説明、関数本体またはクラス定義がありませんでした新しい第二paramが、例の++
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
を見ました。 2番目のパラメータは何を意味しますか?
I:Cは、このライン何の説明、関数本体またはクラス定義がありませんでした新しい第二paramが、例の++
Thing *pThing = new (getHeap(), getConstraint()) Thing(initval());
を見ました。 2番目のパラメータは何を意味しますか?
これは 'placement new
'の構文です。追加のパラメータをカスタムメモリ割り当て関数に渡すためのものです。この一方
:
Obj* pObj = new Obj;
は
、タイプsize_t
と
sizeof(Obj)
の値の単一のパラメータと
operator new
を呼び出し、返されたメモリロケーションに新しいOBJのインスタンスを構築することによって、新たなメモリの割り当てに対応します
Obj* pObj = new (param1, param2) Obj;
は、sizeof(Obj)
の3つのパラメータを持つoperator new
を呼び出した後、param1
およびカスタムoperator new
の戻り値が指すメモリ内にObjインスタンスを構築します。
カスタムoperator new
は、グローバルに、または暗黙的に静的なクラスメンバとして定義できます。この場合、その型または派生型のクラスインスタンスの割り当てのみが考慮されます。
さらに詳しい情報はthis FAQにあります。
完璧な答え - 何も追加または削除できません。 – Arafangion
この回答は純金です –
正しく入力してもよろしいですか?新しい結果を受け入れる変数はないようです。 –
私はそれが "Thing * pThing = new(getHeap()、getConstraint())Thing(initval());" C++の#14の#gotchasから – CTT
ありがとう、CTT。今それは理にかなっています。 –