C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Überraschendes weiter werfen einer Exception!?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Babak Pourat
Guest





PostPosted: Mon Feb 27, 2006 9:06 am    Post subject: Überraschendes weiter werfen einer Exception!? Reply with quote



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





PostPosted: Mon Feb 27, 2006 9:06 am    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote



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





PostPosted: Mon Feb 27, 2006 10:06 am    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote



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





PostPosted: Tue Feb 28, 2006 12:06 am    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote

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





PostPosted: Tue Feb 28, 2006 1:06 pm    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote

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





PostPosted: Tue Feb 28, 2006 2:06 pm    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote

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





PostPosted: Tue Feb 28, 2006 3:06 pm    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote

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





PostPosted: Tue Feb 28, 2006 9:06 pm    Post subject: Re: Überraschendes weiter werfen einer Exception!? Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.