Junior — Senior
63
Проблемы деструкторов при удалении через указатель базового класса
Условие задачи
Опишите, в чём заключается проблема, возникающая при удалении объектов через указатель базового типа (Base*). Какой результат будет при выполнении delete baseChild; и delete baseChildChild;? Объясните, почему такое поведение считается опасным.
struct Base {
virtual void baseFunc0() {
std::cout << "Base::baseFunc0" << std::endl;
}
};
struct Child : Base {
void baseFunc0() override {
std::cout << "Child::baseFunc0" << std::endl;
}
};
struct ChildChild : Child {
void baseFunc0() override {
std::cout << "ChildChild::baseFunc0" << std::endl;
}
};
void run() {
Base base;
Base* baseChild = new Child;
Base* baseChildChild = new ChildChild;
base.baseFunc0();
baseChild->baseFunc0();
baseChildChild->baseFunc0();
delete baseChild;
delete baseChildChild;
}