Задать вопрос
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
  • Вопрос задан
  • 534 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Потому что у вас классический баг - при наследовании деструктор родителя нужно обязательно объявить виртуальным.

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

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

Похожие вопросы