问题:
如何将对象添加到 std::vector<unique_ptr<obj>>
?
我要上课,这就是我尝试做的...
下面,我正在尝试使用 std::unique_ptr<Ball>
在我的 vector 中,因为我认为这是最简单的。
class Ball {
public:
Ball(float x, float y);
std::vector<std::unique_ptr<Ball>> object;
// other declarations below...
};
这里我尝试push_back新元素:
Ball ball { 0, 0 };
for (size_t i { 0 }; i != 50; ++i) {
ball.object.push_back(new Ball { 0, 0 });
// ^ here is the error
}
而且我不明白我遇到的错误。
错误:
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>> &&'
最佳答案
当你使用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 });
}
关于c++ - 如何将对象添加到 std::vector<unique_ptr<obj>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27453583/