A
Sieht gut aus. Bemerkenswert ist noch, daß C++ lokale Objekte destruiert, wenn ein Scope verlassen wird - egal, ob via Exception oder auf regulärem Wege:
void myFunction (void)
{
std::auto_ptr<TStringList> myStringList (new TStringList);
myStringList->Add ("foo");
myStringList->Add ("bar");
ShowMessage (myStringList->Strings[42]); // wirft "out-of-range"-Exception
}
Der Destruktor von std::auto_ptr<> zerstört das zugehörige Objekt, das am Anfang mittels new TStringList erstellt wurde. Dies ist auch der Fall, wenn wie in obiger Situation eine Exception den Programmfluß unterbricht. Aus diesem Grund sollte man für dynamisch angeforderten Speicher Smart-Pointer wie std::auto_ptr<> benutzen.
Lehrling91 schrieb:
Throw übergibt ausserdem noch Informationen wie beispielsweise der Name der Datei, die die Probleme verursacht oder die Fehlernummer an die catch-Anweisung.
Der C++-Standard schreibt das nicht vor. C++Builder macht das zwar, aber auch nur dann, wenn du den "-xp"-Switch aktivierst:
http://docwiki.embarcadero.com/RADStudio/de/C++-Compiler (Abschnitt "Positionsinformation").