Article View: de.comp.lang.c++
Article #202Globale Objekte, exception aus Konstruktor
From: Stephen Friedrich
Date: Wed, 02 Aug 1995 13:45
Date: Wed, 02 Aug 1995 13:45
104 lines
2991 bytes
2991 bytes
Hallo Leute,
weiss jemand eine Loesung fuer folgendes Problem?
Ein Objekt ist global deklariert. Der Konstruktor dazu
loest eine Exception aus. Wie kann ich diese abfangen?
Das ist IMO ein generelles C++-Problem. Mir stellt es sich
unter SunOS 4.1.2 auf einer SparcStation mit gcc 2.6.3.
Also:
//--------- Except.cxx ---------------------------------
class Except {};
class Global {
public:
Global(void) { throw Except(); };
};
Global aGlobal;
int main(int argc, char* argv[]) {};
//-------------------------------------------------------`
Compiliert mit
g++ -g -fhandle-exceptions -o Except Except.cxx
bewirkt die Ausfuehrung natuerlich nur die Ausgabe von
"Abort".
Ich habe ausprobiert einen terminate()-Handler zu
installieren, der innerhalb eines try{} ein rethrow
macht.
Das scheint jedoch nicht moeglich zu sein.
Folgendes fuehrt nach einmaliger Ausgabe von "rethrow!"
zu einer Endlosschleife innerhalb der gcc-Laufzeit-
Bibliothek:
//--------- Except.cxx ---------------------------------
#include <iostream.h>
class Except {};
typedef void(*PFV)();
PFV set_terminate(PFV);
PFV old;
void rethrow(void) {
cout << "rethrow!" << endl << flush;
set_terminate(old);
try {
throw;
}
catch(Except a) {
cout << "TestException!" << endl << flush;
abort();
};
};
class CatchException {
public:
CatchException();
};
CatchException::CatchException (void) {
old = set_terminate(&rethrow);
};
CatchException aCatchException;
class Global {
public:
Global(void) { throw Except(); };
};
Global aGlobal;
int main(int argc, char* argv[]) {};
//-------------------------------------------------------
Es ist sicher im allgemeinen nicht sinnvoll Objekte global
zu deklarieren. Einige Application-Frameworks verlangen das
jedoch fuer bestimmte Objekte, eben um noch vor main()
Initialisierungen zu machen.
Im uebrigen interessiert mich generell eine Loesung.
C++ scheint kein Konzept zu haben, das nicht irgendwo Luecken
oder Unsauberkeiten hat...
Waere dafuer nicht die Moeglichkeit sinnvoll globale
catch()-Funktionen zu schreiben?
----------------------------------------------------------
Stephen Friedrich, Mettlerkampsweg 2, 20535 Hamburg
email : 1friedri@informatik.uni-hamburg.de
Stephen.Friedrich@Hamburg.Netsurf.de
Compuserve: 100440,3434
Fax : +49 40 218418
Technical Details
Message-ID:
<3vnvio$f95@rzsun02.rrz.uni-hamburg.de>Path:
arc1-ca.pugleaf.net!swt6.informatik.uni-hamburg.de!1friedriShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!swt6.informatik.uni-hamburg.de!1friedri From: 1friedri@informatik.uni-hamburg.de (Stephen Friedrich) Newsgroups: de.comp.lang.c++ Subject: Globale Objekte, exception aus Konstruktor Date: 2 Aug 1995 13:45:59 GMT Organization: University of Hamburg -- Germany Sender: 1friedri@swt6.informatik.uni-hamburg.de (Stephen Friedrich) Message-ID: <3vnvio$f95@rzsun02.rrz.uni-hamburg.de> NNTP-Posting-Host: swt6.informatik.uni-hamburg.de Keywords: c++, exception, error handling, object construction