根據該螺紋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