Afficher un message
Vieux 16/10/2007, 17h39   #3
James Kanze
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut 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

  Réponse avec citation
 
Page generated in 0,07299 seconds with 9 queries