Es ist allgemein bekannt, dass, wenn ein Konstruktor einen Befehl auslöst, alle vollständig erstellten Unterobjekte in umgekehrter Reihenfolge zerstört werden, einschließlich der Mitgliedsdaten und aller Arten von Basisklassen. Der Destruktor wird jedoch nicht für nicht delegierende Konstruktoren aufgerufen. Für einen delegierenden Konstruktor wurde das Objekt konstruiert, als der Konstruktor-Körper eingegeben wurde, aber die Konstruktion wird etwas fortgesetzt. Daher stellt sich die Frage, ob der Destruktor der Klasse aufgerufen wird, wenn der delegierende Konstruktor eine Ausnahme innerhalb seines Körpers auslöst?Wird der Destruktor beim Delegieren eines delegierenden Konstruktors aufgerufen?
class X
{
public:
X();
X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
~X();
};
'X' ist kein Member-Objekt von' X', also warum sollte sein Destruktor aufgerufen werden? – Praetorian
@Praetorian: Weil es vollständig vom delegierenden Konstruktor erstellt wurde; und weil der Standard sagt, dass es sein wird. –
Related: http://Stackoverflow.com/q/14386840/981959 –