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
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
gbg
@gbg
Баянист. Тамада. Услуги.
Потому что у вас классический баг - при наследовании деструктор родителя нужно обязательно объявить виртуальным.

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

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

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