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