c++虚基类的析构问题

C++的多态性是通过虚函数来实现的虚函数的出现使得动态链接成为可能。
基于构造函数的特点不能将构造函数定义为虚函数,但可以将虚基类的析构函数定义为虚函数当派生类的对象从内存中撤销时,会先调用派生类的虚基类的析构函数然后自动调用基类的虚基类的析构函数,如此看来虚基类的析構函数也没有必要定义为虚函数但是考虑如下这种情况,如果使用基类指针指向派生类的对象而这个派生类对象恰好是用new运算创建的,这种情况下会如何呢当程序使用delete运算撤销派生类对象时,这时只会调用基类的虚基类的析构函数而没有调用派生类的虚基类的析构函数。如果使用的是虚虚基类的析构函数的话就不一样了,所以定义虚虚基类的析构函数有时候还是很有必要的下面这段程序就说明叻上面的问题:
没有定义虚虚基类的析构函数时,code如下:

这说明delete pA只是调用了基类A的虚基类的析构函数而没有调用子类B的虚基类的析构函數,这不是我们所想要的
而把基类A的虚基类的析构函数定义为虚函数后,就可以达到了我们所想要的效果了code如下:

成员函数说白了可以看成局部变量对象虚基类的析构时直接销毁,但是指针类的需要用代码销毁销毁之后并不会把数据销毁,而是这块数据已经不安全了就像一块哋,你不种了肯定不会把你之前种的庄稼砍掉把地翻新,但是不别人种不种你管不了你种得玉米,等释放了拿出来的可能是豆子

我有Java的一些经验和现在做一个C++課程。我想尝试写一个接口但我遇到了一些麻烦与虚基类的析构函数,我一直没能解决甚至在互联网上的帮助...这里是我的代码:

我曾嘗试为基类声明一个虚拟虚基类的析构函数,为派生类声明一个非虚拟虚基类的析构函数但是我得到一个错误,说“对Force ::?Force()'的未定义引用”这是什么意思,我该如何解决

原谅我,如果这是一个愚蠢的问题!

我要回帖

更多关于 string类型是什么 的文章

 

随机推荐