假如一个基类类型的指针指向了一个派生类的对象,如果需要将指针delete时,假如基类的析构函数不为虚函数,这时就会只调用基类的析构函数,而指针指向的是派生类的对象,派生类的对象不包含基类的析构函数,这时候就像是拆房子的时候只把地基给拆了,地基上的建筑仍然存在。
而如果基类的析构函数为虚函数时,在delete时,编译器就会解析指针指向的对象是谁,这时候如果指向的是派生类的对象,就会先调用派生类的析构函数,再调用基类的析构函数。
假如一个基类类型的指针指向了一个派生类的对象,如果需要将指针delete时,假如基类的析构函数不为虚函数,这时就会只调用基类的析构函数,而指针指向的是派生类的对象,派生类的对象不包含基类的析构函数,这时候就像是拆房子的时候只把地基给拆了,地基上的建筑仍然存在。
而如果基类的析构函数为虚函数时,在delete时,编译器就会解析指针指向的对象是谁,这时候如果指向的是派生类的对象,就会先调用派生类的析构函数,再调用基类的析构函数。