首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

多重继承的有关问题

2013-10-29 
多重继承的问题class ClxBaseA{public:ClxBaseA() {}~ClxBaseA() {cout Output from the destructor

多重继承的问题
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变成虚函数,即可
[解决办法]

引用:
恩。加virtual是能解决内存泄露的问题,能否从虚函数表的原理方面给解答下为什么会出现内存泄露呢?谢谢

不加virtual的话,就只能释放ClxDerived的ClxBaseA类子对象,如果加的话,就走虚函数机制调用ClxDerived的析构函数,从而正常的释放对象
[解决办法]
这个根本不需要涉及virtual的实现就可以解释了,你的析构不是virtual,那么你用指针析构derived class的object就是非常危险的事情
[解决办法]
有兴趣可以看看

不要陷入的太深,知道有这么个事情就够了,这些东西都不是学习的重点。以标准为中心。

热点排行