永发信息网

带了虚方法,析构函数就一定要virtual吗

答案:2  悬赏:30  手机版
解决时间 2021-03-25 19:42
带了虚方法,析构函数就一定要virtual吗
最佳答案
如果基类里面有虚成员函数,则最好把析构函数也设置为虚函数
否则,派生类在用基类指针调用时,发生内存泄露,析构时不会调用派生类的析构函数
如果基类没有需成员函数,则无所谓析构函数是不是虚函数!
全部回答
如果 A的析构函数不是virtual的,那么此时就不是先调用B的析构函数再调用A的析构函数。
Output:
~A();
如果A 的析构函数为virtual,则先~B(),再~A()
Output:
~B();
~A();
类如果会被派生的话,析构函数一般都应该定义为virtual的,主要不是防止内存泄露,而是为了正确的析构。如果是个封闭类(即不再被派生),就不要定义为virtual的。虚函数毕竟耗费较大的。
不用virtual 的几种情况:
1、作为非公有基类。仅作为 private base class 使用的 class 不需要使用虚拟析构函数
2、不作为接口使用的基类。
3. 如果你可以保证这个类不被public继承(private/protected继承的话,在非friend函数/类中就无法用基类指针指向派生类了)
4. 如果它的所有派生类(包括派生类的派生类)的析构函数都是trivial的(这里的trivial指的是在程序员的层次什么事也不做)
5. 如果不需要用基类的指针指向派生类的对象
在这五种情况下,不把析构函数声明为virtual都是可以的,何况效率会高一些——但前提是你得保证前提的成立——不过这些保证常常是很难100%的:谁能保证别人在派生你的类的时候,析构函数是trivial的,或者别人不用你提供的基类的指针指向派生类对象?这些常常是很难得到保证的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
派克钢笔45系列怎么换笔尖?
婚假和产假可以一起休吗
ZA恒润娇养适合什么肤质
求教顶力DSK3.1A如何与电脑连接
实况足球8的存档在那个文件夹里?
201不锈钢材料不带磁
汽车蓄电池上写的80AH 800A什么意思
求大海啊故乡的钢琴谱!要G大调的,最好有左
我弟17岁出去上班了,没过几天有个15岁的女孩
外径64mm 内径44mm 厚4mm的骨架油封
2010年是中意建交40周年。意大利“中国文化年
人在野外如何生存怎么才能活下去
叶朝翁是什么代的诗人
学好思想道德修养与法律基础的基本方法有哪些
能够走出无垠沙漠的人,除去战胜了肆虐的风沙
推荐资讯
手机内屏能看到网格好还是看不到好
女人该嫁个什么样的人
某校某班同学在政治老师的指导下开展了一次以
听说研究所一般不要专硕,是这样吗
求公子歌的《长腿叔叔》,耽美小说,公子歌的
为什么封建制度在中国实行这么漫长?
预测今年国庆节宁通高速会堵吗
最近流行的那首唱戏的歌是什么歌
gta5的APC的炮咋开的 火炮
请问从成田机场到六本木一丁目,省钱省力的路
锐腾1.5t发动机动力怎么样
跪求!移动宽带是不是不能玩起凡游戏啊?加分
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?