对析构函数的疑惑
疑问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 中的析构函数。
这节课老师讲的基类中都有虚函数,而此时基类中没有虚函数,子类中的析构函数还是不能调用。到这里就有困惑了,还望老师予以解答。。。谢谢您