Angenommen, wir haben eine Klasse wie folgt aus:Klasse Zeiger Mitglieder und Ausnahmebehandlung
class A {
public:
A();
~A();
void foo();
int* pointer;
};
A::A() {
pointer = new int;
}
A::~A() {
delete pointer;
}
A::foo() {
throw "error";
}
Und die folgenden Beispiele, die es nutzen:
Beispiel 1
int main() {
A a;
throw "error";
return 0;
}
Beispiel 2
int main() {
A a;
a.foo();
return 0;
}
In diesen beiden Fällen wird es ein Speicherverlust, da der Destruktor für A wird niemals aufgrund der nicht behandelte Ausnahme aufgerufen werden.
Meine Frage ist, ob die Verantwortung liegt beim Benutzer der Klasse, um sicherzustellen, dass der Destruktor durch die Behandlung der Ausnahme aufgerufen wird: im ersten Beispiel ist die Ausnahme nicht mit der Klasse verbunden, so würde ich annehmen, dass die Verantwortung liegt der Benutzer der Klasse, aber im zweiten Beispiel wirft die Klasse selbst den Fehler auf - ob der Benutzer der Klasse immer noch sicher ist, dass die Exception korrekt behandelt wird, oder ist das einfach ein schlechtes Design der Klasse selbst?
Ja, das ist wahr, kleine Verbesserungen hinzugefügt. –
Der Leerwurf wurde behoben(); Error. Danke für das Aufzeigen :) – p0llard