Чем «= default» отличается от «{}» для конструктора и деструктора по умолчанию?

Первоначально я написал это как вопрос только о деструкторах, но теперь ядобавив рассмотрение конструктора по умолчанию. Вот'исходный вопрос:

Если я хочу дать своему классу виртуальный деструктор, но в остальном он будет таким же, как тот, который генерирует компилятор, я могу использовать:=default

class Widget {
public:
   virtual ~Widget() = default;
};

Но кажется, что я могу получить тот же эффект с меньшим количеством печати, используя пустое определение:

class Widget {
public:
   virtual ~Widget() {}
};

Есть ли способ, по которому эти два определения ведут себя по-разному?

Судя по ответам, опубликованным на этот вопрос, ситуация для конструктора по умолчанию выглядит аналогично. Учитывая, что между значениями "" почти нет различий=default а также ""{} для деструкторов, есть ли аналогичная разница в значении между этими опциями для конструкторов по умолчанию? То есть, если я хочу создать тип, в котором объекты этого типа будут создаваться и уничтожаться, почему я хочу сказать

Widget() = default;

вместо?

Widget() {}

Я прошу прощения, если расширение этого вопроса после первоначальной публикации нарушает некоторые правила SO. Размещение почти идентичного вопроса для конструкторов по умолчанию показалось мне менее желательным вариантом.

Ответы на вопрос(3)

Ваш ответ на вопрос