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?
be destroyed until the end of the exception-handler).