Я первоначально разместил это как вопрос только о деструкторах, но теперь я добавляю рассмотрение конструктора по умолчанию. Вот оригинальный вопрос:
Если я хочу дать моему классу деструктор, который является виртуальным, но в остальном такой же, как и тот, который генерирует компилятор, я могу использовать
=default
:class Widget { public: virtual ~Widget() = default; };
Но кажется, что я могу получить тот же эффект с меньшим количеством печати, используя пустое определение:
class Widget { public: virtual ~Widget() {} };
Есть ли способ, по которому эти два определения ведут себя по-разному?
Судя по ответам на этот вопрос, ситуация для конструктора по умолчанию выглядит аналогично. Учитывая, что для деструкторов почти нет различий в значении между " =default
" и " {}
", существует ли аналогичное различие в значении между этими опциями для конструкторов по умолчанию? То есть, если я хочу создать тип, в котором объекты этого типа будут создаваться и уничтожаться, почему я хочу сказать
Widget() = default;
вместо того
Widget() {}
?
Я прошу прощения, если расширение этого вопроса после первоначальной публикации нарушает некоторые правила SO. Размещение почти идентичного вопроса для конструкторов по умолчанию показалось мне менее желательным вариантом.
std::has_trivial_destructor<Widget>::value
и true
для первого, но false
для второго. Что это значит, я тоже не знаю. :)
= default
это более явно imo и согласуется с поддержкой его конструкторами.