C++中,子类会继承父类的虚函数表!对于父类的析构函数(虚函数) 也会继承吗?

C++中,子类会继承父类的虚函数表!对于父类的析构函数(虚函数) 也会继承吗?,第1张

上面的问题,楼上已经回答啦!我来说说这个意义吧!
如果子类的的虚函数表中有父类的析构函数,看起来这个父类析构函数的存在似乎没有任何意义!!
类是否需要一个虚析构函数?
如果一个类,有子类那么这个类就应该需要一个虚析构函数。虚函数也只有在继承的时候才会有用的。
说个例子:
class A{
string t;
};
class B:A{
string s;
};
int main(){
A bp=new B; //这句话是没有问题的吧!
delete bp; //但是这句话就会报错啦、除非你在A里面加上虚析构函数。
return 0;}
这个就是他的意义吧!这个例子不是我原创的,来自《c++沉思录》

当父类指针指向子类对象的时候,delete父类的指针,如果父类的析构函数不为虚函数,则调用父类的析构函数,子类的对象并没有得到释放。

而当父类的析构函数为虚函数,则delete父类指针时,调用的是子类的虚构函数(自动被重写),而析构子类对象后自动会调用父类的析构函数。

对象的时候首先运行的函数 可以有参数 可以无参数 也可以重载 你可以发现你在定义类的成员的时候无法赋初始值 构造函数的很重要的一个用处就是初始化里面的成员变量
析构函数正好相反 当你这个类的对象不存在的时候 先运行析构函数 然后再释放这个对象所占用的内存 比如说定义在某个函数里的类的对象 当这个函数体结束的时候 先运行这个类的对象的析构函数 然后释放该类所占用的内存 现在析构函数最大的用处就是 比如说你在构造函数里用了 new这个函数 申请了一块堆内存 (或者用malloc 一样的作用)如果你不释放这块内存就会造成内存泄露 这个时候就应该在析构函数里写一个delete函数释放申请的空间(如果是malloc申请的则用free()函数)别的用处就看你自己想象了。。。
另外还有一点应该注意 先构造后析构 比如你申请了类TEMP的两个对象TEMP a;TEMP b;则析构的时候首先析构b,然后再析构a,如果是继承的话 则先构造子类 然后构造父类 先析构父类 后析构子类 你可以自己尝试写点儿句子 可以更加了解构造函数析构函数的顺序及作用。。。

纠正一点:形参作为参数,是没有析构概念的。
如果参数是类,则子类的析构要优先于父类的析构。这就和盖房子一个道理,,层数越高,则继承的级别越高,最后析构就是回收房子,你见过谁家里拆房子是1楼拆完再拆2楼的么?


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13369388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存