Здравствуйте, 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);
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.