多重继承的问题
class ClxBaseA
{
public:
ClxBaseA() {};
~ClxBaseA()
{
cout << "Output from the destructor of class ClxBaseA!" << endl;
}
void DoSomething() { cout << "Do something in class ClxBaseA!" << endl; };
};
class ClxBaseB
{
public:
ClxBaseB() {};
virtual ~ClxBaseB()
{
cout << "Output from the destructor of class ClxBaseB!" << endl;
};
virtual void DoSomething() { cout << "Do something in class ClxBaseB!" << endl; };
};
class ClxDerived : public ClxBaseA,public ClxBaseB
{
public:
ClxDerived() {};
~ClxDerived()
{
cout << "Output from the destructor of class ClxDerived!" << endl;
}
void DoSomething() { cout << "Do something in class ClxDerived!" << endl; };
};
int _tmain(int argc, _TCHAR* argv[])
{
ClxBaseB* pBaseB = new ClxDerived;
pBaseB->DoSomething();
delete pBaseB;
ClxBaseA* pBaseA = new ClxDerived;
pBaseA->DoSomething();
delete pBaseA;
return 0;
}
请牛人解答为什么程序崩溃?
[解决办法]
除了内存泄露以外么看出什么问题。
试试在release模式下是否还有这个现象。
[解决办法]
很明显
~ClxBaseA()
这个析构函数不是虚函数呀。
ClxBaseA* pBaseA = new ClxDerived;
pBaseA->DoSomething();
delete pBaseA;
就无法正确的释放ClxDerived的内存空间了,所以报错了。
把ClxBaseA的析构函数,前加个virtual变成虚函数,即可
[解决办法]