根据该螺纹Returning a pointer to a vector element,建议使用插入时到载体中的对象,并返回它的指针以下代码:卸下自std元素::性病的目录:: unique_pointer
// 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
是一个指向要移除的对象的普通指针。
请注意,即使使用'std :: vector'重新分配调整大小的东西,它通常仍然比'std :: list'快得多(尽管这里并没有真正的数据局部性,的std :: unique_ptr's)。 – rubenvb 2015-02-23 09:13:21
@rubenvb通过不必执行两个指针取消引用来访问元素,您仍然可以获得额外的数据局部性。取决于应用程序,减少大量的解除引用可能会产生重大影响。 – sjdowling 2015-02-23 09:20:14