我使用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
更好吗?这里引用用于第二个参数。
答案 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的指针向量。