This answer Zitate C++ 11 Standard 3.8:Warum löschen Sie nicht ein Objekt, das einen Destruktor mit einem nicht definierten Verhalten in C++ 11 hat?
, wenn es an den destructor oder wenn ein Löschausdruck (5.3.5) nicht verwendet werden zur Freigabe der Speicherung kein expliziter Aufruf ist, wird der Destruktor nicht sein implizit aufgerufen und jedes Programm, das von den vom Destruktor erzeugten Seiteneffekten abhängt, hat ein nicht definiertes Verhalten.
Der Teil über den Destruktor, der nicht aufgerufen wird, ist klar. Angenommen, der übersprungene Destruktor hatte einen Nebeneffekt, der das Programmverhalten hätte beeinflussen sollen.
Warum ist das Programmverhalten jetzt undefiniert? Warum sollten die Nebenwirkungen nicht übersprungen werden (da der Destruktor nicht aufgerufen wird) und das Programm normal ohne Nebenwirkungen ausgeführt wird?
Interessante Frage. Aber warum sollte jemand den Destruktor nicht auf einem Objekt aufrufen wollen, wenn es nicht mehr benötigt wird? – ereOn
Wenn der Destruktor in diesem Fall nicht triviale Aufgaben für ex ausführt: Schließen von Ressource-Handles oder Festlegen des Status auf etwas Gültiges usw., dann wird der nicht aufgerufene Destruktor natürlich das Programm beeinflussen und zu einem nicht definierten Verhalten führen. Ich verstehe die Begründung nicht für das Überspringen von Nebenwirkungen. –
@ereOn: Singletons wurden als Anwendungsfall erwähnt (dies sollte jedoch nicht als gutes Design angesehen werden). –