Re: Виртуальный деструктор
От: VTT http://vtt.to
Дата: 06.12.16 18:02
Оценка:
Здравствуйте, ksandro, Вы писали:

K>Все мы знаем в каких случаях и почему деструктор базового класса должен быть виртуальным. Но вот про деструктор потомка обычно ничего конкретного не говорится. Однако в C++11 появилось ключевое слово override и возможность явно указать использование деволтного деструктора.


K>
K>struct Parent
K>{
K>  virtual ~Parent()
K>  {
K>  }
    
K>};

K>struct Child: public Parent
K>{
K>  ~Child() override = default;
K>};

K>


K>Насколько корректно с точки зрения стандарта использовать одновременно "override" и "=default", будет ли диструктор сгенерирован правильно в этом случае.


Мне представляется, что да.
Но такая запись по идее может приводить к генерации деструктора, единственной заботой которого будет вызов деструктора базового класса.

K>И, если это корректно, можно ли считать, что именно так и желательно писать всегда, чтобы гарантировать что деструктор родителя виртуальный.


Можно еще более явно написать:
static_assert(::std::has_virtual_destructor< Parent >::value);
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.