Thread View: comp.std.c++
1 messages
1 total messages
Started by Igor Boukanov
Tue, 02 Apr 1996 15:16
?s about exceptions in destructors
Author: Igor Boukanov
Date: Tue, 02 Apr 1996 15:16
Date: Tue, 02 Apr 1996 15:16
67 lines
2330 bytes
2330 bytes
Consider the following:
struct A {
~A(){throw int(0);}
};
struct B {
A a;
~B(){throw float(0.0);}
};
void f() { B b; }
So according to the 09.95 DWP, 15.5.1.1 any call to f will call
terminate().
But what should happen in the next code:
void f2() {
char buf[sizeof(B)];
B* b = new(buf) B;
b->B::~B();
};
void g2() {
try { f2(); } catch(float) { }
}
I suppose that g2 will catch float exception after "throw float(0.0);"
in B::~B and A::~A of b->a will not be called because according to 15.2:
" 1 As control passes from a throw-point to a handler, destructors are
invoked for all automatic objects constructed since the try block was
entered.
2 An object that is partially constructed will have destructors executed
only for its fully constructed sub-objects..."
and because b is NOT a automatic object so b->a is NOT a automatic object too.
Is this right?
And what should happen in the next:
void f3() {
B* b = new B;
delete b;
};
Is it supposed that this lines can be rewritten as:
void f4() {
B* b = new B;
try { b->B::~B(); }
catch(...) { operator delete(b); throw; }
operator delete(b);
};
So A::~A() for b->a will not be called again but memory will be released?
--
Regards, Igor Boukanov.
igor.boukanov@fi.uib.no
http://www.fi.uib.no/~boukanov/
[ comp.std.c++ is moderated. To submit articles: try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ FAQ: http://reality.sgi.com/employees/austern_mti/std-c++/faq.html ]
[ Policy: http://reality.sgi.com/employees/austern_mti/std-c++/policy.html ]
[ Comments? mailto:std-c++-request@ncar.ucar.edu ]
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads