По этой теме Returning a pointer to a vector element, рекомендуется использовать следующий код при вставке объекта в вектор и возвращающегося его указатель:Удаление элемента из станд :: список станд :: 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();
}
I планируете использовать тот же код, но с std::list
. У меня теперь нет проблемы с перераспределением, но std::unique_ptr
все еще помогает при уничтожении вектора - вместо простого delete
.
Вопрос: Как использовать список remove
с этой настройкой? С помощью простых указателей я мог бы просто написать myList.remove(myPtr)
, где myPtr
- простой указатель на объект для удаления.
Обратите внимание, что даже при использовании объекта «std :: vector» все значение перераспределения на размер изменяется часто быстрее, чем 'std :: list' (хотя на самом деле вы не располагаете данными с помощью' станд :: unique_ptr's). – rubenvb
@rubenvb вы по-прежнему получаете дополнительную локальность данных, не требуя двух разметки указателя для доступа к элементу. Сокращение вдвое числа различий может оказать существенное влияние в зависимости от приложения. – sjdowling