根据此线程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
是指向要删除的对象的普通指针。
答案 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);
}