[gclist] Finalization and death notices

Tim Hollebeek thollebeek@cigital.com
Mon, 8 Oct 2001 21:30:17 -0400

> Consider:
>   struct X{ int a;~X(){}}; X x; x.a=1;x.~X();cout<<x.a;
> Is the last "look at" x.a in the output statement illegal?
> Could you point out in the standard where this is specified?

>From the Dec 1996 WP (sorry, don't have anything more recent handy)
AFAIR this sort of thing didn't change.

"Once a destructor is invoked for an object, the object no longer
exists; ..."

which in C++ standardese implies that x.a=1 invokes undefined behavior.

class.dtor.14 then continues with an example:

[Example:  if  the destructor  for  an  automatic  object  is explicitly
invoked, and the block is subsequently left in a manner that  would
ordinarily  invoke implicit destruction of the object, the behavior is 
undefined.  ]

So your snippet is doubly-undefined (i.e. it invokes undefined behavior
even *without* the access to x.a)

Tim Hollebeek
Research Scientist
Cigital Labs, Inc.