44

C ++で特定のメモリ位置に新しいオブジェクトを作成することは可能ですか?オブジェクトを作成したい共有メモリのブロックがあります。これは可能ですか?

4

6 に答える 6

71

配置new()が必要です。基本的に、ヒープから新しいメモリを割り当てるのではなく、既存のメモリのブロックを使用してコンストラクターを呼び出します。

編集:配置を使用して作成されたオブジェクトのデストラクタを明示的に呼び出す責任があることについての注意を理解してnew()から使用してください!

于 2009-10-12T14:08:13.307 に答える
16

はい。演算子 new() の配置バリアントを使用する必要があります。例えば:

void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;

配置 new は例外をスローしないことに注意してください。

于 2009-10-12T14:10:11.963 に答える
1

多くのきめの細かいオブジェクトを割り当てたい場合、最良のアプローチは、ある種のリングバッファと組み合わせて新しい配置を使用することです。それ以外の場合は、オブジェクトポインタ自体とは別にポインタを追跡する必要があります。

于 2009-10-13T07:24:00.763 に答える