2009-02-25 7 views
5

I:Cは、このライン何の説明、関数本体またはクラス定義がありませんでした新しい第二paramが、例の++

Thing *pThing = new (getHeap(), getConstraint()) Thing(initval()); 

を見ました。 2番目のパラメータは何を意味しますか?

+0

正しく入力してもよろしいですか?新しい結果を受け入れる変数はないようです。 –

+0

私はそれが "Thing * pThing = new(getHeap()、getConstraint())Thing(initval());" C++の#14の#gotchasから – CTT

+0

ありがとう、CTT。今それは理にかなっています。 –

答えて

19

これは 'placement new'の構文です。追加のパラメータをカスタムメモリ割り当て関数に渡すためのものです。この一方

Obj* pObj = new Obj; 

、タイプ size_tsizeof(Obj)の値の単一のパラメータと operator newを呼び出し、返されたメモリロケーションに新しいOBJのインスタンスを構築することによって、新たなメモリの割り当てに対応します
Obj* pObj = new (param1, param2) Obj; 

は、sizeof(Obj)の3つのパラメータを持つoperator newを呼び出した後、param1およびカスタムoperator newの戻り値が指すメモリ内にObjインスタンスを構築します。

カスタムoperator newは、グローバルに、または暗黙的に静的なクラスメンバとして定義できます。この場合、その型または派生型のクラスインスタンスの割り当てのみが考慮されます。

さらに詳しい情報はthis FAQにあります。

+0

完璧な答え - 何も追加または削除できません。 – Arafangion

+0

この回答は純金です –

関連する問題