mrjbom
@mrjbom

Почему не вызывается деструктор класса?

Приветствую.
Во время освобождения памяти выделенной для класса Child, его деструктор не вызывается, хотя при выделении памяти, вызывается его конструтор.
Почему так?

Думаю этот код не нуждается в комментариях:
#include <iostream>

using namespace std;

class Parent
{
public:
    Parent() {
        cout << "Parent() called\n";
    }
    ~Parent() {
        cout << "~Parent() called\n";
    }
};

class Child : public Parent
{
public:
    Child() {
        cout << "Child() called\n";
    }
    ~Child() {
        cout << "~Child() called\n";
    }
};

int main()
{
    Parent* ptr = new Child();
    delete ptr;
}

Output:
Parent() called
Child() called
~Parent() called
  • Вопрос задан
  • 431 просмотр
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Потому что у вас классический баг - при наследовании деструктор родителя нужно обязательно объявить виртуальным.

Если это не сделать, получится то что у вас получилось.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы