Спочатку я розміщував це як питання лише про деструктори, але тепер додаю розгляд конструктора за замовчуванням. Ось оригінальне запитання:
Якщо я хочу дати своєму класу деструктор, який є віртуальним, але інакше такий же, як і генерував компілятор, я можу використовувати
=default:class Widget { public: virtual ~Widget() = default; };Але здається, що я можу отримати той же ефект при меншому наборі тексту, використовуючи порожнє визначення:
class Widget { public: virtual ~Widget() {} };Чи є спосіб, коли ці два визначення поводяться по-різному?
На основі відповідей, розміщених на це питання, ситуація для конструктора за замовчуванням здається подібною. З огляду на те, що для деструкторів майже немає різниці в значенні між " =default" і " {}", чи не існує майже однакової різниці в значенні між цими параметрами для конструкторів за замовчуванням? Тобто, припускаючи, що я хочу створити тип, де об’єкти цього типу будуть створюватися і знищуватися, чому я б хотів сказати
Widget() = default;
замість
Widget() {}
?
Прошу вибачення, якщо продовження цього питання після його оригінальної публікації порушує деякі правила ТА. Повідомлення майже однакового питання для конструкторів за замовчуванням вважало мене менш бажаним варіантом.
std::has_trivial_destructor<Widget>::valueє trueдля першого, але falseдля другого. Які наслідки цього я не знаю. :)
= defaultє більш явним imo, і відповідає підтримці його з конструкторами.