Я создаю граф сцены в 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