在推入std :: vector时,std :: unique_ptr的正确用法是什么

时间:2013-01-23 16:14:12

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

我希望有一个指向我班级中对象的指针。为了避免为它做一个析构函数,我想使用std::unique_ptr,因为在我的类中创建/拥有/破坏了对象,但是我有一个我无法理解的编译器错误。下一个代码将作为我的问题的简短示例:

std::unique_ptr<int> createPtr(int value)
{
    std::unique_ptr<int> ptr(new int(value));
    return ptr;
};

int main()
{
    std::vector<std::unique_ptr<int>> vec;
    vec.push_back(createPtr(1));

    std::unique_ptr<int> ptr = createPtr(2);
    vec.push_back(ptr);//error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
}

您能解释一下我为何会收到此错误以及std::unique_ptr的正确用法吗?

2 个答案:

答案 0 :(得分:14)

或者:

vec.push_back(std::move(ptr));

或者:

vec.emplace_back(createPtr(2));

答案 1 :(得分:3)

您有unique_ptr

std::unique_ptr<int> ptr = createPtr(2);

现在你把它的副本放在载体中:

vec.push_back(ptr);

现在您有两个unique_ptr具有相同的值。如果这是允许的话,它将不是唯一的。