Afficher un message
Vieux 29/06/2008, 21h33   #7
Vijay
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Basic question C++ exception

On Jun 29, 2:55pm, Erik Wikström <Erik-wikst...@telia.com> wrote:
> On 2008-06-29 20:28, Vijay wrote:
>
>
>
> > On Jun 29, 12:41 pm, Erik Wikström <Erik-wikst...@telia.com> wrote:
> >> On 2008-06-29 17:34, Vijay wrote:
> >> > Question 2.

>
> >> > class A
> >> > {
> >> > public:
> >> > A(){cout<<"In Constructor\n";}
> >> > A(const A&){cout<<"In Copy Constructor\n";}
> >> > ~A(){cout<<"In Destructor\n";}
> >> > };
> >> > try{
> >> > cout<<"In Try\n";
> >> > throw A();
> >> > }
> >> > catch(A a)
> >> > {
> >> > cout<<"In Catch\n";
> >> > }
> >> > output:
> >> > In Try;
> >> > In Constructor
> >> > In Copy Constructor
> >> > In Catch
> >> > In Destructor
> >> > In Destructor

>
> >> > Why object created by throw A() has not been deleted while exiting try
> >> > block in above code?

>
> >> The object created by thow can not be destroyes before it has been used
> >> to initialise the object in the exception-handler (the extra copy has
> >> been eliminated). It will also live until the last exception handler has
> >> run (if the object is destroyed and you re-throw what would happen
> >> then?), so it is the last destructor to run.

>
> >> If I comment out the copy-constructor my compiler does not optimise away
> >> the extra copy and I get the following result:

>
> >> In Try
> >> In Constructor // throw A(), followed by a copy-constructor
> >> In Destructor // The object created by A() is destroyed
> >> In Catch // a in the catch(A a) is copy-constructed first
> >> In Destructor // The object created in the handler is destroyes
> >> In Destructor // The exception object dies

>
> > Thanks. I think, because of compiler optimization, i am getting
> > confused.
> > one more point: in your above result, i didnt get two lines
> > In Destructor // The object created by A() is destroyed
> > and
> > In Destructor // The exception object dies

>
> > object created by A() is exception object. right?
> > If no, then when exception object is created which dies in last line?

>
> No, the exception object is a copy of the object created by A(), unless
> the compiler uses the optimisation, in which case the exception-object
> and the object created by A() is the same (and in that case it will no
> be destroyed until the end of the exception-handler).
>

Got it. Thanks
> --
> Erik Wikström


  Réponse avec citation
 
Page generated in 0,07344 seconds with 9 queries