私は、コンテナの emplace 関数の一般的な考え方を知っています(「新しい要素をその場で構築する」)。
私の質問は、それが何をするかではなく、Effective C++ 11 のようなものです。
いつ使用するかを決定するための適切なルールは何std::vectorですか
? emplace_back()push_back()
emplace_back()オブジェクトをコンテナに入れる直前にゼロから構築する必要がある場合にのみ、本当に意味があります。事前に構築されたオブジェクトを渡すと、基本的に に分解されpush_back()ます。オブジェクトをコピーするのにコストがかかる場合、またはタイトなループで多くのオブジェクトを作成する必要がある場合、ほとんどの違いが見られます。
次のコードを置き換える傾向があります。
myvector.push_back(ContainedObject(hrmpf));
と
myvector.emplace_back(hrmpf);
前者がプロファイラーの出力に表示される場合。新しいコードについては、可能でemplace_backあればおそらく使用します (私たちはまだ主に VS2010 を使用しており、その実装emplace_back()は少し足を引っ張っています)。