如何将对象添加到std :: vector <unique_ptr <obj >>?

And*_* DM 1 c++ raii vector unique-ptr c++11

问题:
如何将对象添加到std::vector<unique_ptr<obj>>

我有一个课,这就是我想要做的......
下面,我试图std::unique_ptr<Ball>在我的矢量中使用,因为我认为这将是最简单的.

class Ball {
public:
    Ball(float x, float y);
    std::vector<std::unique_ptr<Ball>> object;
    // other declarations below...
};
Run Code Online (Sandbox Code Playgroud)


在这里,我试图推送新元素:

Ball ball { 0, 0 };
for (size_t i { 0 }; i != 50; ++i) {
ball.object.push_back(new Ball { 0, 0 });
//        ^ here is the error
}
Run Code Online (Sandbox Code Playgroud)

我不明白我得到的错误.
错误:
error C2664: 'void std::vector<std::unique_ptr<Ball,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>::push_back(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)' : cannot convert argument 1 from 'Ball *' to 'std::unique_ptr<Ball,std::default_delete<_Ty>> &&'

小智 7

使用时push_back,需要创建一个unique_ptr.由于键入太多且容易出错,因此您可以使用emplace_back转发球对象.在C++ 14中,make_unique可用并且应该是首选.

for (size_t i { 0 }; i != 50; ++i) {
    ball.balls.emplace_back(new Ball { 0, 0 });
}
Run Code Online (Sandbox Code Playgroud)