Re: MI and clone()
Am 23.02.2010 23:42, schrieb Noah Roberts:
I'm having a very weird problem here that's apparently caused by MI
and/or virtual inheritance that I'd like help with. I finally managed
to get the problem to appear in small form. I'll leave the code at the
end so I can explain some things more deeply before hand.
There's no MI involved. You don't even use class derived and sub_base2.
I made a simpler example that fails on my MSVC 2008 SP1:
#include <string>
#include <iostream>
struct base {
virtual base * clone() const = 0;
};
struct sub : virtual base {
virtual sub * clone() const = 0;
};
struct derived : sub {
virtual derived * clone() const {
return new derived(*this); // <- here
}
int val;
};
int main()
{
derived d;
sub* s = &d;
sub * s2 = s->clone(); // AV in copy constructor
}
Looking in the debugger, the this pointer in the clone function is
wrong. The problem seems to be a combination of virtual inheritance and
covariant return types. If all the clone functions return base*, it
works. Obviously a bug in the compiler.
--
Thomas