Inwiefern unterscheidet sich "= default" von "{}" für den Standardkonstruktor und -destruktor?

Ich habe dies ursprünglich nur als Frage zu Destruktoren gepostet, aber jetzt berücksichtige ich den Standardkonstruktor. Hier ist die ursprüngliche Frage:

Wenn ich meiner Klasse einen Destruktor geben möchte, der virtuell ist, aber ansonsten mit dem identisch ist, den der Compiler generieren würde, kann ich ihn verwenden=default:

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

Aber es scheint, dass ich mit einer leeren Definition den gleichen Effekt mit weniger Eingaben erzielen kann:

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

Gibt es eine Möglichkeit, wie sich diese beiden Definitionen unterschiedlich verhalten?

Basierend auf den Antworten, die für diese Frage gesendet wurden, scheint die Situation für den Standardkonstruktor ähnlich zu sein. Angesichts der Tatsache, dass es fast keinen Unterschied in der Bedeutung gibt zwischen "=default" und "{}"Gibt es für Destruktoren in ähnlicher Weise fast keinen Unterschied in der Bedeutung zwischen diesen Optionen für Standardkonstruktoren? Angenommen, ich möchte einen Typ erstellen, in dem die Objekte dieses Typs sowohl erstellt als auch zerstört werden. Warum sollte ich sagen?

Widget() = default;

anstatt

Widget() {}

?

Ich entschuldige mich, wenn das Erweitern dieser Frage nach dem ursprünglichen Posting gegen einige SO-Regeln verstößt. Das Posten einer fast identischen Frage für Standardkonstruktoren erschien mir als die weniger wünschenswerte Option.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage