Будет ли деструктор виртуальным при объявлении default? C++
Прочитав о полезности виртуальных деструкторов пришел к выводу, что лучше всегда деструктор объявлять виртуальным и взять это за правило. Однако столкнулся с интересным вопросом. А что будет, если в классе определен деструктор, так:
virtual ~MyDestructor() noexcept = default;
Если не ошибаюсь, то генерируемые деструкторы по умолчанию будут виртуальными только в том случае, если деструктор базового класса тоже виртуальный. А что происходит с деструкторами базового класса, объявлены таким образом? Будут ли они сгенерированы автоматически и будут ли они виртуальными? Да и вообще, стоит ли так делать?
Ответы (1 шт):
Да, будет сгенерирован виртуальный деструктор по умолчанию.
Хотите — проверьте сами, код ведь тривиальный:
struct Base
{
virtual ~Base() = default;
};
struct Der: public Base
{
~Der() { cout << "Yes!!"; }
};
int main()
{
Base * b = new Der;
delete b;
}
Если деструктор не будет генерироваться — будет ошибка линковки, если не виртуальный — Yes!! вы не увидите :)