0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 16
1

Вызов деструктора класса-наследника

28.01.2018, 12:59. Показов 2006. Ответов 5
Метки нет (Все метки)

Всем привет!

есть базовый класс и класс-наследник

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Base {
public:
    virtual Func(size_t i) {}
};
 
class NotBase : public Base {
private:
    char* aux;
 
public:
    Func(size_t i) override {}
    ~NotBase() {
        delete[] aux; 
    }
};
 
int main() {
    NotBase b;
    return 0;
}
по окончании программы вызывается деструктор класса-родителя и не вызывается деструктор NotBase. Как - без изменения класса-родителя, то есть виртуальный деструктор не подойдет - сделать так, чтобы по окончании программы вызывался деструктор ~NotBase()?

Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2018, 12:59
Ответы с готовыми решениями:

Вызов конструктора базового класса из класса-наследника
Можно ли вне списка инициализации вызвать конструктор базового класса ? class A { int a;...

Вызов деструктора для класса в векторе
Уважаемые знатоки, подскажите по-поводу деструктора класса, а то я совсем запутался вот в такой...

Вызов членов и объектов с наследника класса
Есть базовый класс и два наследника: class CBase { public: int iNum; ...

Вызов виртуального метода класса наследника из вектора
#include <iostream> #include <vector> using namespace std; class A { public: ...

5
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.01.2018, 13:22 2
Цитата Сообщение от CrazyMadd Посмотреть сообщение
и не вызывается деструктор NotBase.
Откуда такой вывод?
0
Эксперт С++
8720 / 4300 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
28.01.2018, 13:30 3
Цитата Сообщение от CrazyMadd Посмотреть сообщение
Как - без изменения класса-родителя
у вас там все прекрасно вызывается.
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.01.2018, 13:40 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Base {
public:
    virtual void Func(size_t i) {}
    Base()
    {cout << "Base()" << endl;}
    ~Base()
    {cout << "~Base()" << endl;}
};
 
class NotBase : public Base {
private:
    char* aux;
public:
    void Func(size_t i) override {}
    NotBase() : aux(nullptr)
    {cout << "NotBase()" << endl;}
    ~NotBase() {
        cout << "~NotBase()" << endl;
        delete[] aux; 
    }
};
 
int main()
{
    {
        NotBase b;
    }
    
    system("pause");
}
Миниатюры
Вызов деструктора класса-наследника  
0
nd2
3433 / 2812 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.01.2018, 13:43 5
Вот так не будет вызван:
C++
1
2
    Base* pBase = new NotBase();
    delete pBase;
1
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 16
30.01.2018, 12:18  [ТС] 6
Да, вопрос оказался в другом. В main() был код while(std::cin >> aux). Заканчивал ввод при помощи ctrl+D, а итоге вся программа заканчивалась почему-то. А так да, все вызывается
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2018, 12:18
Помогаю со студенческими работами здесь

Вызов деструктора
Доброго вам времени суток. Проблема в том, что деструктор не выводит сообщение без этой строки....

Вызов деструктора
Здравствуйте ,подскажите пожалуйста ,есть вот такой код ... При создании объекта MyClass в...

Вызов деструктора
Вызывается ли деструктор объекта при завершении программы? а при аварийном завершении? А если снять...

Вызов деструктора
При ручном вызове деструктора, освобождается ли память*

Вызов деструктора
Есть написанный мною код: #include &lt;iostream&gt; class Foo { private: int *key; public: Foo...

Правда, что указатель класса-наследника не может указывать на объект класса-родителя?
Доброго времени суток! Пример кода ниже. Правда ли , что указатель класса-наследника не может...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru