[Bug c++/42063] g++ violate [class.dtor] when explicit destructor call
paolo dot carlini at oracle dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 16 13:59:00 GMT 2009
------- Comment #2 from paolo dot carlini at oracle dot com 2009-11-16 13:59 -------
The confusion stems from the way, slightly confusing, in which the example in
the standard is written, which, if considered an actually runnable snippet,
invokes undefined behavior, because destroys the base of D_object two times. If
you change it to something like:
D D_object, D_object2;
B* B_ptr = &D_object2;
std::cout << "begin" << std::endl;
D_object.B::~B();
B_ptr->~B();
std::cout << "end" << std::endl;
Then the example still explain the important role of virtual destructors - that
is, B_ptr->~B() invokes ~D, *not* ~B (after that, ~B is implicitly invoked, as
normally happens in inheritance hierarchies) - but no undefined behavior is
involved.
Talking about undefined behavior, after "Once a destructor is invoked for an
object, the object no longer exists" the (draft C++0x) standard continues ";
the behavior is undefined if the destructor is invoked for an object whose
lifetime has ended": as any undefined behavior, anything can happen, depending
on the actual size of the class being destructet, depending on the diagnostics
enabled in the underlying memory allocation functions, etc.
--
paolo dot carlini at oracle dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42063
More information about the Gcc-bugs
mailing list