Re: A problem about virtual function?
On Oct 16, 4:42 pm, Erik Wikström <Erik-wikst...@telia.com> wrote:
> On 2007-10-16 16:09, Wayne Shu wrote:
> > Today I meet a problem about virtual function. Consider the
> > following little program.
> > #include <iostream>
> > class base
> > {
> > int i;
> > public:
> > virtual void print() { std::cout << "base" << std::endl; }
> > virtual ~base() {}
> > };
> > class derived : public base
> > {
> > public:
> > virtual void print() { std::cout << "derived" << std::endl; }
> > };
> > int main()
> > {
> > base b;
> > b::~base();
> > new (&b) derived;
> > (&b)->print(); // (1)
> > base *p = &b;
> > p->print();
> > return 0;
> > }
> > I have try the VC2005 Express Edition and GCC 3.4.2
> > and the result is :
> > base
> > derived
> > Why (1) statement print "base"?
> First, I am not sure if it is legal to call the destructor of
> an automatic object and then construct a new object of a type
> derived from the first object's type in the same place, it
> seems very suspect to me.
I think it's undefined behavior; if it isn't, it should be. (To
start with, there's no guarantee that sizeof(derived) <=
sizeof(base).)
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
|