标题:虚析构
只看楼主
hubinyes
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:104
专家分:557
注 册:2014-2-4
结帖率:100%
已结贴  问题点数:20 回复次数:5 
虚析构
class A{
public:
A();
~A();
}

class B : public  A{
public:
B();
~B();
}

A* a = new B();
delete a;
为什么B的析构不被调用。

[ 本帖最后由 hubinyes 于 2014-6-9 13:48 编辑 ]
搜索更多相关主题的帖子: public 
2014-06-09 13:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
你的标题就是你的答案
不知道你故作一问所为何?
2014-06-09 14:28
hubinyes
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:104
专家分:557
注 册:2014-2-4
得分:0 
求原理
2014-06-10 08:59
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
得分:0 
当执行delete时,编译器知道的唯一信息是该指针的类型是指向基类的指针,
编译器不知道该指针实际指向的对象的类型,
因此只调用基类的析构函数

要删除在空闲存储器中遗留的对象,这时就要用虚析构函数了

使用虚析构函数能动态解析对析构函数的调用

不知懂否

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-06-10 10:14
hubinyes
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:104
专家分:557
注 册:2014-2-4
得分:0 
回复 4 楼 funyh250
使用虚析构函数能动态解析对析构函数的调用,,,怎样动态解析的。
2014-06-10 19:55
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
得分:15 
回复 5 楼 hubinyes
如果没有声明虚析构函数
      当执行delete时,编译器知道的唯一信息是该指针的类型是指向基类的指针
如果声明了虚析构函数
     当执行delete时,编译器知道信息是该指针的类型是指向基类的指针而且还知道该指针实际指向的对象的类型,这样析构时也会调用该实际指向的对象的类型的析构函数

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-06-11 00:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-432679-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063814 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved