7

operator をオーバーロードできることはわかっていますnewsize_tそうすると、デフォルトでメソッドにパラメーターが送信されます。ただし、size_tパラメーターと追加のユーザー指定パラメーターをオーバーロードされたnewオペレーターメソッドに送信することは可能ですか?

例えば

int a = 5;
Monkey* monk = new Monkey(a);

このように新しい演算子をオーバーライドしたいので

void* Monkey::operator new(size_t size, int a)
{

...

}

ありがとう

編集:これが私が達成したいことです:

アプリの開始時に割り当てられた仮想メモリのチャンク (メモリ プール) があります。基本クラスを継承するすべてのオブジェクトは、オーバーロードされた new 演算子を継承します。オーバーロードされた new で引数を渡したい場合があるのは、メモリ プールを使用するか、malloc で割り当てるかをメモリ マネージャーに伝えるためです。

4

1 に答える 1

13

その追加のオペランドで new を呼び出します。

 Monkey *amonkey = new (1275) Monkey(a);

補遺

引数をnewオペレーターに渡す実際の例は、Boehm のガベージ コレクターによって提供されます。

 Monkey *acollectedmonkey = new(UseGc) Monkey(a);

deleteそして、 -ingについて気にする必要はありませんacollectedmonkey(そのデストラクタが奇妙なことをしないと仮定します。この回答を参照してください)。これらは、やAllocatorのようなテンプレート コレクションに明示的な引数を渡したいというまれな状況です。std::vectorstd::map

MemoryPoolメモリ プールを使用する場合、いくつかのクラスを持ち、そのクラスのインスタンス (またはそれらへのポインター) を操作に渡したいことがよくnew ありますdelete。読みやすさの理由から、あいまいな整数でメモリ プールを参照することはお勧めしません。

于 2011-12-31T00:50:24.693 に答える