【发布时间】:2023-03-04 08:40:01
【问题描述】:
问题:
如何将对象添加到 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...
};
我在这里尝试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>> &&'
【问题讨论】:
-
一个球拥有一堆球?这是一个奇怪的设计。
-
使用
emplace_back将参数传递给unique_ptr的构造函数。 -
@remyabel,谢谢,解决了。
-
unique_ptr的转换构造函数,它拥有原始指针 is markedexplicit的所有权。因此,您必须显式地执行从原始指针到unique_ptr的转换。 -
@dyp 从技术上讲,如果它是显式的,它就不是一个转换构造函数:)
标签: c++ c++11 vector unique-ptr raii