У меня есть следующий фрагмент кода деструктора в базовом классе «SceneNode», который пытается очистить его вектор-член и удалить объекты вектора, которые получены из SceneNode, но получить ошибку при Удаление ляющий> ToString линии, пожалуйста, вы можете указать в правильном направлении:Вызов метода производного класса из деструктора базового класса
SceneNode::~SceneNode() {
LOG(DEBUG)<< "Node children size: " + to_string(children.size()) + " [" + toString() + "]";
// clean children nodes
for (SceneNode* child : children) {
LOG(DEBUG) << "Deleting ";
LOG(DEBUG) << "Deleting " + child->toString();
delete child;
LOG(DEBUG) << "Deleted " + child->toString();
}
Когда я отладка, он показывает мне правильный производный объект есть:
Name : child
Details:0x3204b40
Default:0x3204b40
Decimal:52448064
Hex:0x3204b40
Binary:11001000000100101101000000
Octal:0310045500
Name : lib::SceneNode
Details:{_vptr.SceneNode = 0x4e3430 <vtable for lib::ImageSceneNode+16>, id = {static npos = <optimized out>, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x3204c08 "New Node"}}, position = {x = 0, y = 0}, size = {x = 1920, y = 1080}, center = {x = 960, y = 540}, rotation = 0, alpha = 255, enabled = true, visible = true, deleted = false, parent = 0x22fca0, children = {<std::_Vector_base<lib::SceneNode*, std::allocator<lib::SceneNode*> >> = {_M_impl = {<std::allocator<lib::SceneNode*>> = {<__gnu_cxx::new_allocator<lib::SceneNode*>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}, animators = {<std::_Vector_base<lib::NodeAnimator*, std::allocator<lib::NodeAnimator*> >> = {_M_impl = {<std::allocator<lib::NodeAnimator*>> = {<__gnu_cxx::new_allocator<lib::NodeAnimator*>> = {<No data fields>}, <No data fields>}, _M_start = 0x0, _M_finish = 0x0, _M_end_of_storage = 0x0}}, <No data fields>}, sceneManager = 0x22fc98}
Default:{...}
Decimal:{...}
Hex:{...}
Binary:{...}
Octal:{...}
Log:
2015-03-09 15:33:39,685 DEBUG [default] [] [virtual lib::SceneNode::~SceneNode()] [..\src\lib\scene\node\SceneNode.cpp:30] Node children size: 1 [SceneNode]
2015-03-09 15:33:39,685 DEBUG [default] [] [virtual lib::SceneNode::~SceneNode()] [..\src\lib\scene\node\SceneNode.cpp:34] Deleting
2015-03-09 15:33:39,685 FATAL [default] CRASH HANDLED; Application has crashed due to [SIGSEGV] signal
Спасибо!
Вы не можете сделать этого. Полученный класс уже уничтожен. –
Я считаю, что есть и следствие конструкторов (т. Е. Вызов виртуальной функции производного класса не будет работать, потому что производный класс еще не построен). –
Спасибо, теперь, если я удаляю вызовы с производными методами, это терпит неудачу, я думаю, что это моя оригинальная проблема, я поставил сумасшедшие заявления о регистрации, чтобы увидеть, что происходит: –