对析构函数的疑惑
疑问1、有个问题啊老师, 程序在执行delete p;这个语句时,为什么会根据 p 指针找到相应的子类对象的虚函数表指针啊;
疑问2、 还有一个问题,就是-- 如果基类中没有虚函数,为什么使用 delete p; 还是不能调用指针P 对应子类对象的析构函数啊!
针对疑问2自己试验的代码如下:
#include <iostream>
using namespace std;
class Shape
{
public:
Shape(){ cout << "Shape()\n";}
~Shape() { cout << "~Shape()\n"; }
int x;
int y;
};
class Circle : public Shape
{
public:
Circle(){ cout << "Circle()\n";}
~Circle() { cout << "~Circle()\n";}
};
int main()
{
Shape *p = new Circle;
delete p;
p = NULL;
return 0;
}运行结果如下:

此时,还是没有调用子类Circle 中的析构函数。
这节课老师讲的基类中都有虚函数,而此时基类中没有虚函数,子类中的析构函数还是不能调用。到这里就有困惑了,还望老师予以解答。。。谢谢您