注册 登录
编程论坛 C++教室

虚析构

hubinyes 发布于 2014-06-09 13:46, 461 次点击
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 编辑 ]
5 回复
#2
rjsp2014-06-09 14:28
你的标题就是你的答案
不知道你故作一问所为何?
#3
hubinyes2014-06-10 08:59
求原理
#4
funyh2502014-06-10 10:14
当执行delete时,编译器知道的唯一信息是该指针的类型是指向基类的指针,
编译器不知道该指针实际指向的对象的类型,
因此只调用基类的析构函数

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

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

不知懂否
#5
hubinyes2014-06-10 19:55
回复 4 楼 funyh250
使用虚析构函数能动态解析对析构函数的调用,,,怎样动态解析的。
#6
funyh2502014-06-11 00:58
回复 5 楼 hubinyes
如果没有声明虚析构函数
      当执行delete时,编译器知道的唯一信息是该指针的类型是指向基类的指针
如果声明了虚析构函数
     当执行delete时,编译器知道信息是该指针的类型是指向基类的指针而且还知道该指针实际指向的对象的类型,这样析构时也会调用该实际指向的对象的类型的析构函数
1