1

以下のようないくつかのコードに出会いました。

char *buffer = new char[sizeof(PoolThread) * numThreads];
m_threads = reinterpret_cast<PoolThread*>(buffer);
for (int i = 0; i < numThreads; i++)
{
    new (buffer)PoolThread(*this);
    buffer += sizeof(PoolThread);
}

newhere は、が指す空のメモリ空間を(クラスm_threadsの)実際のオブジェクトに初期化するためのものだと思いますPoolThread

私はグーグルで検索しましたが、次のnewような使用法に関する情報しか見つかりませんでした:

pointer = new somthing[number]; 

new上のコード例での使用方法の詳細を願っています。そして、この使用法はC ++標準から来ていますか?

4

1 に答える 1

7

これは新しい配置であり、OS の通常のメモリ マネージャーをオーバーライドして、割り当てるオブジェクトを配置する正確な場所を選択する場合に使用されます。

投稿したコードbufferでは、要素が割り当てられる場所を指定するために address が使用されています (実際には、連続するすべての割り当てがアドレスに従うように変更されています)。

もちろん、これによりメモリ マネージャはメモリ割り当ての義務から解放されるため、格納するものに有効なアドレスを提供するのはユーザー自身の責任です。そのため、本当に必要なときにのみ使用されます。

于 2013-05-23T03:56:35.817 に答える