powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Деструктор в наследнике
14 сообщений из 14, страница 1 из 1
Деструктор в наследнике
    #38758494
Skylimited
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, есть
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class A { } //абстрактный, пустой деструктор
class B :public A 
{  
   B::~B()
  {
    //Some Action 
  }
 }

void main()
{
A* e_a = new B();
delete e_a; //Вызывается пустой деструктор А, а нужен B?

}


Проблема в том, что деструктор B не вызывается, что в общем, логично, но мне нужно чтобы вызывался именно деструктор B.
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758532
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Skylimited,

Код: plaintext
1.
class A { virtual ~A(){} } 
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758629
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Barlone,
да и в B лучше бы виртуальный деструктор сделать сразу
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758696
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneSkylimited,

Код: plaintext
1.
class A { virtual ~A(){} } 



Ну, а кто-то тут говорил, что ты С++ не знаешь...
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758698
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychBarlone,
да и в B лучше бы виртуальный деструктор сделать сразу

Не нужно. Не обязательно.
Он будет виртуальным по наследованию от полиморфного класса с виртуалным деструктором.
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758717
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivОн будет виртуальным по наследованию от полиморфного класса с виртуалным
деструктором.
Не будет. О чём компилятор и вывалит своё предупреждение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758729
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivОн будет виртуальным по наследованию от полиморфного класса с виртуалным
деструктором.
Не будет. О чём компилятор и вывалит своё предупреждение.
Да ну. А в стандарте написаноIf a class has a base class with a virtual destructor, its destructor (whether user- or implicitly-declared) is virtual.
12.4 http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2012/n3337.pdf
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758752
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivegorychBarlone,
да и в B лучше бы виртуальный деструктор сделать сразу

Не нужно. Не обязательно.
Он будет виртуальным по наследованию от полиморфного класса с виртуалным деструктором.а потом он создаст класс C : public B, и опять будет думать, почему не тот деструктор вызывается. Зачем вообще думать об этом? написать virtual быстрее и проще, чем копаться в стандарте каждый раз
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38758757
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychа потом он создаст класс C : public B, и опять будет думать, почему не тот деструктор вызываетсяНе будет. Вызовется "тот" деструктор: ~C.
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38759025
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych, Dimitry Sibiryakov,

virtual в наследника не обязательно писать - он наследуется.

Но с точки зрения стиля, я бы всегда его писал.
Кроме того в С++11 я бы еще писал атрибут override
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38759035
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorych, Dimitry Sibiryakov,

virtual в наследника не обязательно писать - он наследуется.

Но с точки зрения стиля, я бы всегда его писал.
Кроме того в С++11 я бы еще писал атрибут override

Угу, и ещё с собакой впереди.
Чё, совсем джаву из С++ хочешь сделать ?
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38759050
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorych, Dimitry Sibiryakov,

virtual в наследника не обязательно писать - он наследуется.

Но с точки зрения стиля, я бы всегда его писал.
Кроме того в С++11 я бы еще писал атрибут override Насчет стиля спорить не буду. А override - штука полезная. Ну больше даже не для деструкторов, а для функций: если случайно в наследнике с типом аргумента ошибся - с override компилятор выругается. А без override молча создаст новую функцию.
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38759057
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivУгу, и ещё с собакой впереди.
Чё, совсем джаву из С++ хочешь сделать ?
Причем здесь джава?
Если метод виртуальный, то нужно для того, кто будет потом поддерживать этот код, поставить пометку.
...
Рейтинг: 0 / 0
Деструктор в наследнике
    #38759072
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyegorych, Dimitry Sibiryakov,

virtual в наследника не обязательно писать - он наследуется.

Но с точки зрения стиля, я бы всегда его писал.
Кроме того в С++11 я бы еще писал атрибут override я то за стиль переживаю. И override выглядит полезным, согласен
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Деструктор в наследнике
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]