NHD*_*aly 17 c++ stdvector unique-ptr c++11 c++14
基于在回答这些 问题 在这里,我知道这肯定是最好使用C++ 14的std::make_unique,而不是emplace_back(new X)直接.
那就是说,打电话是首选
my_vector.push_back(std::make_unique<Foo>("constructor", "args"));
Run Code Online (Sandbox Code Playgroud)
要么
my_vector.emplace_back(std::make_unique<Foo>("constructor", "args"));
Run Code Online (Sandbox Code Playgroud)
也就是说,我应该使用push_back或emplace_back何时添加std::unique_ptr构造的std::make_unique?
====编辑====
为什么?c:< - (微笑)
Pra*_*ian 14
就新物体的构造而言,它没有任何区别; 你已经有了一个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();
Run Code Online (Sandbox Code Playgroud)
你可以写
my_vector.emplace_back(std::make_unique<Foo>("constructor", "args")).do_stuff();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6435 次 |
| 最近记录: |