如何使用独特的指针向量?

时间:2013-02-07 18:30:19

标签: c++ unique-ptr

我使用vector<unique_ptr<Data>>来存储我的数据,以实现自动内存管理和unique_ptr的低成本。我有一个函数来尝试将新创建的数据添加到其中。可以真实地添加或不添加数据。它被添加,我不需要关心它的内存删除,因为指针向量将处理它。如果没有添加,我希望可以自动删除新创建的数据。有没有简单的方法来实现它?该功能可能如下所示或其他类似形式。感谢。

// Return true if really added, return flase if not.
bool add(vector<unique_ptr<Data>>& vec, Data* newData);

根据Dave的回答,自bool add(vector<unique_ptr<Data>>& vec, std::unique_ptr<Data>& newData)非公开可复制以来unique_ptr更好吗?这里引用用于第二个参数。

2 个答案:

答案 0 :(得分:8)

也将newData作为unique_ptr接受。

bool add(vector<unique_ptr<Data>>& vec, std::unique_ptr<Data> newData)
{
    if(blah blah blah)
    {
        vec.push_back(std::move(newData));
        return true;
    }
    return false;
}

答案 1 :(得分:1)

您想要达到的语义是什么。

FWIW:unique_ptr的向量很少是个好主意。 如果你 希望矢量拥有独家所有权,你会更好 使用Boost的指针向量。