Czym różni się „= default” od „{}” dla domyślnego konstruktora i destruktora?
Pierwotnie zamieściłem to jako pytanie tylko o destruktory, ale teraz dodam rozważanie domyślnego konstruktora. Oto oryginalne pytanie:
Jeśli chcę dać mojej klasie destruktor, który jest wirtualny, ale poza tym jest taki sam jak generowany przez kompilator, mogę użyć=default
:
class Widget {
public:
virtual ~Widget() = default;
};
Ale wydaje mi się, że mogę uzyskać ten sam efekt przy mniejszym wpisywaniu przy użyciu pustej definicji:
class Widget {
public:
virtual ~Widget() {}
};
Czy jest jakiś sposób, w jaki te dwie definicje zachowują się inaczej?
Na podstawie odpowiedzi opublikowanych dla tego pytania sytuacja konstruktora domyślnego wydaje się podobna. Biorąc pod uwagę, że nie ma prawie żadnej różnicy w znaczeniu między „=default
" i "{}
"dla destruktorów, czy podobnie nie ma prawie żadnej różnicy w znaczeniu między tymi opcjami dla konstruktorów domyślnych? To znaczy, zakładając, że chcę utworzyć typ, w którym obiekty tego typu będą zarówno tworzone, jak i niszczone, dlaczego miałbym chcieć powiedzieć
Widget() = default;
zamiast
Widget() {}
?
Przepraszam, jeśli rozszerzenie tego pytania po jego pierwotnym opublikowaniu narusza niektóre zasady SO. Opublikowanie niemal identycznego pytania dla konstruktorów domyślnych uznało mnie za mniej pożądaną opcję.