Я первоначально разместил это как вопрос только о деструкторах, но теперь я добавляю рассмотрение конструктора по умолчанию. Вот оригинальный вопрос:
Если я хочу дать моему классу деструктор, который является виртуальным, но в остальном такой же, как и тот, который генерирует компилятор, я могу использовать
=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 и согласуется с поддержкой его конструкторами.