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

标签 c++ c++11 vector unique-ptr raii

问题:
如何将对象添加到 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/

相关文章:

c++ - 继承成本是否与对象是分配在栈上还是堆上有关?

c++ - 使用结构/遗传算法

C++ vector.begin() 和 vector[0]

c++ - c++11(工作草案)标准中的布局兼容性是否太弱?

c++11 绑定(bind)和应用?

c++ - 在 C++ 中的二进制文件中存储可变大小结构的 vector

c++ - Vector:clear/pop_back 不会运行析构函数

c++ - 静态数组的动态数组

c++ - 如果对象用作左值或右值,如何检测和处理?

c++ - 检测单个枚举常量的类型