c++ - about Multiple inheritance and virtual inheritance -
i don't quite understand multiple inheritance , virtual inheritance. plz me. here little test:
class test1 {}; class test21 : public test1 {}; class test22 : public test1 {}; class test3 : public test21, public test22 {}; int main() { test1 * t1 = new test3(); delete t1; system("pause>nul"); return 0; } i got error: error 1 error c2594: 'initializing' : ambiguous conversions 'test3 *' 'test1 *'.
why?
then tried this:
class test1 {}; class test21 : virtual public test1 {}; class test22 : virtual public test1 {}; class test3 : public test21, public test22 {}; int main() { test1 * t1 = new test3(); delete t1; system("pause>nul"); return 0; } now got error: debug assertion failed!
can explain me multiple inheritance , virtual inheritance?
your first piece of code has exact problem virtual inheritance solves: have diamond in inheritance hierarchy. test21 , test22 both inherit test1, when inherit both of them, two versions of test1 in hierarchy, ambiguous 1 wish use.
the solution, in second sample: virtually inherit test1 single version.
however, code has undefined behaviour.
test1 * t1 = new test3(); delete t1; you delete derived instance through pointer base class without virtual destructor. means test3 object not correctly destroyed.
you should add virtual destructors classes:
virtual ~test1() = default; //c++11 virtual ~test1() {}; //prior version
Comments
Post a Comment