 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Babak Pourat Guest
|
Posted: Mon Feb 27, 2006 9:06 am Post subject: Überraschendes weiter werfen einer Exception!? |
|
|
Ich habe zum verstehen von "function try blocks" folgenden code geschrieben:
#include <iostream>
class Y{
public:
~Y(){
throw 0; // Ich weiss, exceptions im destruktor sind böse!
}
};
class X{
Y y;
public:
~X()try{
}
catch (int &) {
std::cout << "exception catched 1\n";
}
};
int main(){
try{
X x;
return 0;
}catch (int &) {
std::cout << "exception catched 2\n";
return 0;
}
}
Wenn ich den Code compiler (MSVS 7.1) und ausführe sieht es so aus als ob
die exception 2 mal gefangen wird (Ausgabe:
exception catched 1
exception catched 2
).
Aber ich sehe dem code nirgends an, dass die Exception 2 mal geworfen wurde.
Kann mir jemand etwas erhellendes zu diesem Thema sagen/schreiben.
Gruß und danke im vorraus
Babak
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Dietmar Kuehl Guest
|
Posted: Mon Feb 27, 2006 9:06 am Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Babak Pourat wrote:
| Quote: | Aber ich sehe dem code nirgends an, dass die Exception 2 mal geworfen
wurde.
Kann mir jemand etwas erhellendes zu diesem Thema sagen/schreiben.
|
Wenn die Ausführung das Ende des "function-try-block"s erreicht, so
wird die Exception erneut geworfen, so als wäre das letzte Statement
des "function-try-block"s 'throw;'. Die einzige Möglichkeit, sowas
zu verhindern, besteht darin, eine andere Exception zu werfen.
--
<mailto:dietmar_kuehl (AT) yahoo (DOT) com> <http://www.dietmar-kuehl.de/>
<http://www.eai-systems.com> - Efficient Artificial Intelligence
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Babak Pourat Guest
|
Posted: Mon Feb 27, 2006 10:06 am Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Dietmar Kuehl wrote:
| Quote: | Babak Pourat wrote:
Aber ich sehe dem code nirgends an, dass die Exception 2 mal geworfen
wurde.
Kann mir jemand etwas erhellendes zu diesem Thema sagen/schreiben.
Wenn die Ausführung das Ende des "function-try-block"s erreicht, so
wird die Exception erneut geworfen, so als wäre das letzte Statement
des "function-try-block"s 'throw;'. Die einzige Möglichkeit, sowas
zu verhindern, besteht darin, eine andere Exception zu werfen.
|
Vielen Dank
Babak
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Markus Moll Guest
|
Posted: Tue Feb 28, 2006 12:06 am Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Hallo
Die Antwort auf deine Frage hast du ja bereits, aber noch etwas völlig
anderes...
Babak Pourat wrote:
| Quote: | std::cout << "exception catched 1\n";
^^^^^^^ |
caught
Gruß
Markus
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Babak Pourat Guest
|
Posted: Tue Feb 28, 2006 1:06 pm Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Markus Moll wrote:
| Quote: | std::cout << "exception catched 1\n";
^^^^^^^
caught
catch, caught, caught |
....
catch, caught, caught
Vieleicht hilft's
Babak
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Tibor Pausz Guest
|
Posted: Tue Feb 28, 2006 2:06 pm Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Babak Pourat <pourat (AT) autronic (DOT) melchers.de> wrote:
| Quote: | class X{
Y y;
public:
~X()try{
}
catch (int &) {
std::cout << "exception catched 1\n";
}
};
|
Werfenden Destruktoren sollte man tunlichst vermeiden. Das führt nur zu
Ärger, wenn ein Objekt dieser Klasse durch Verlassen eines Scopes,
bedingt durch das Werfen einer anderen Exception, destruiert werden
soll, kann es passieren, daß eine weitere Exception geworfen werden soll
-> unexspected(). Das Programm terminiert sofort.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Babak Pourat Guest
|
Posted: Tue Feb 28, 2006 3:06 pm Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Tibor Pausz wrote:
| Quote: | Babak Pourat <pourat (AT) autronic (DOT) melchers.de> wrote:
class X{
Y y;
public:
~X()try{
}
catch (int &) {
std::cout << "exception catched 1\n";
}
};
Werfenden Destruktoren sollte man tunlichst vermeiden. Das führt nur
zu Ärger, wenn ein Objekt dieser Klasse durch Verlassen eines Scopes,
bedingt durch das Werfen einer anderen Exception, destruiert werden
soll, kann es passieren, daß eine weitere Exception geworfen werden
soll -> unexspected(). Das Programm terminiert sofort.
|
Ich schrieb aber auch noch:
| Quote: | class Y{
public:
~Y(){
throw 0; // Ich weiss, exceptions im destruktor sind böse!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
};
|
Das zeigt (mindestens) zweierlei:
- Auch in deutsch is meine Rechschreibung verbesserungsfähig.
- Du brauchst etwas mehr Übung im lesen.
Babak
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Tibor Pausz Guest
|
Posted: Tue Feb 28, 2006 9:06 pm Post subject: Re: Überraschendes weiter werfen einer Exception!? |
|
|
Babak Pourat <pourat (AT) autronic (DOT) melchers.de> wrote:
| Quote: | Ich schrieb aber auch noch:
|
Pardon, das hatte ich übersehen.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|