の回答に基づいてこれら 質問 ここstd::make_unique
直接使用するよりも、C++14 を使用する方が確実に好ましいことはわかっていますemplace_back(new X)
。
とはいえ、電話するほうが好ましいでしょうか
my_vector.push_back(std::make_unique<Foo>("constructor", "args"));
または
my_vector.emplace_back(std::make_unique<Foo>("constructor", "args"));
つまり、から構築された を追加する場合、push_back
と のどちらを使用すればよいのでしょうか?emplace_back
std::unique_ptr
std::make_unique
==== 編集 ====
そしてなぜ? c: <-- (小さな笑顔)
ベストアンサー1
新しいオブジェクトの構築に関しては違いはありません。すでにunique_ptr<Foo>
prvalue ( の呼び出しの結果make_unique
) があるため、に追加される要素を構築するときにpush_back
と の両方が移動コンストラクターemplace_back
を呼び出します。unique_ptr
vector
挿入後に新しく構築された要素にアクセスするユースケースの場合、emplace_back
C++17以降は要素への参照を返すため、より便利です。
my_vector.push_back(std::make_unique<Foo>("constructor", "args"));
my_vector.back().do_stuff();
あなたは書ける
my_vector.emplace_back(std::make_unique<Foo>("constructor", "args")).do_stuff();