从std :: list of std :: unique_ptr中删除元素

时间:2015-02-23 07:51:14

标签: c++ std unique-ptr

根据此线程Returning a pointer to a vector element,建议在将对象插入向量并返回其指针时使用以下代码:

// in your class
std::vector<std::unique_ptr<SceneGraphNode>> m_children;

SceneGraphNode* addChild(std::string name)
{
    std::unique_ptr<SceneGraphNode> child(new SceneGraphNode(this,name));
    myList.push_back(std::move(child));
    return myList.back().get();
}

我计划使用相同的代码,但使用std::list。我没有重新分配的问题,但是std::unique_ptr仍然有助于破坏向量 - 而不是普通的delete

问题:如何在此设置中使用列表remove?使用普通指针,我可以写myList.remove(myPtr),其中myPtr是指向要删除的对象的普通指针。

3 个答案:

答案 0 :(得分:2)

如果myList.remove(myPtr)myPtr,您仍然可以unique_ptr。这是因为operator==因此类智能指针而过载:http://en.cppreference.com/w/cpp/memory/unique_ptr/operator_cmp

答案 1 :(得分:1)

如果你真的想使用普通指针作为myPtr,你可以使用

myList.remove_if([myPtr](const std::unique_ptr<SceneGraphNode>& ptr){return ptr.get() == myPtr});

答案 2 :(得分:0)

可能会有所帮助:

it = find(myList.begin(), myList.end(), name);
if (it != myList.end())
{
   mylist.erase(it);
}