Как удалить элемент в std::vector, не удаляя указательC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как удалить элемент в std::vector, не удаляя указатель

Сообщение Anonymous »

Я создаю граф сцены в OpenGL без различных типов узлов и пытаюсь добавить новый узел между отношениями родитель/потомок, чтобы новый узел был родителем дочернего элемента и дочернего элемента. родителя.
Вот как сейчас выглядит мой код:
parentTransform->removeChild(std::shared_ptr(child));
newTransform->addChild(std::shared_ptr(child));
parentTransform->addChild(newTransform);

но моя программа аварийно завершает работу, когда доходит до второй строки, потому что дочерний элемент больше не существует. Вот моя реализация RemoveChild:
bool TransformNode::removeChild(const std::shared_ptr& child) {
auto it = std::find(children.begin(), children.end(), child);
if (it != children.end()) {
children.erase(it);
child->setParent(nullptr);

return true;
}
return false;
}

Проблема, с которой я столкнулся, заключается в том, что при использованииshared_ptr метод стирания также удаляет сам указатель. Я пробовал искать альтернативу и не нашел ничего подходящего. Каким может быть решение этой проблемы? На всякий случай, вот моя реализация addChild:
void TransformNode::addChild(std::shared_ptr child) {
children.push_back(child);
child->setParent(this);
}


Подробнее здесь: https://stackoverflow.com/questions/791 ... he-pointer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»