Спочатку я розміщував це як питання лише про деструктори, але тепер додаю розгляд конструктора за замовчуванням. Ось оригінальне запитання:
Якщо я хочу дати своєму класу деструктор, який є віртуальним, але інакше такий же, як і генерував компілятор, я можу використовувати
=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, і відповідає підтримці його з конструкторами.