Re: Why '(&b) -> f() ' is static binding?
On Oct 23, 9:46 am, Markus Moll <m...@rbg.informatik.tu-darmstadt.de>
wrote:
Erik Wikstr=F6m wrote:
3.7.2 =A73 might also be relevant: "If a named automatic object has
initialization or a destructor with side effects, it shall not be
destroyed before the end of its block, ..."
This is in my opinion just a very bad formulation. It is meant
to describe that the implementation cannot destroy an object
earlier than at the end of the scope if the effect would be
visible. I don't think it is meant to limit explicit
destruction, although at the moment it is admittedly unclear
if it does.
It's hard to say, but from the context, I think the above refers
to what an implementation is allowed to do: an implementation
cannot call the destructor of an object with a non trivial
destructor before the object goes out of scope, simply because
the object appears unused. I don't think it really necessary to
say this---the standard describes very clearly when the
abstract machine should call the destructor, and an
implementation can only differ from the abstract machine when it
can prove that the difference leads to no change in observable
behavior. But I can imagine that in the 1990's, when this text
was being formulated, that this wasn't so "obvious"; I know that
some early compilers I used complained that the variable wasn't
used when I used RAII or similar patterns, and of course in C
(where there are no destructors), the compiler is free to
eliminate the variable as soon as it is no longer used.
I'm very sure that something like:
{
T var ;
// ...
var.~T() ;
new (&var) T ;
// ...
}
is legal and well defined (unless the constructor of T happens
to raise an exception). I'm less sure about changing the type.
On the other hand, the compiler is allowed to assume that the
expression 'var' doesn't change type. Any use of var to refer
to anything other than a T (or an array of char or unsigned
char---you can look at raw memory) is undefined behavior.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34