第一种情况:基类指针指向派生类对象。
#include <iostream>
using namespace std;
class Base{
public:
~Base() {cout<<"~B"<<endl;}
};
class Derived:public Base{
public:
~Derived() {cout<<"~D"<<endl;}
};
int main (){
Base *b = new Derived; //注意这里
delete b;
}这里只有基类(Base)会被析构掉,派生类(Derived)没有被析构。第二种情况:派生类指针指向派生类对象。
#include <iostream>
using namespace std;
class Base{
public:
~Base() {cout<<"~B"<<endl;}
};
class Derived:public Base{
public:
~Derived() {cout<<"~D"<<endl;}
};
int main (){
Derived *d = new Derived; //注意这里
delete d;
}
这次基类和派生类都能被析构掉。
第三种情况:基类指针指向派生类对象,但析构函数是virtual 的。
class Base{
public:
virtual ~Base(){cout<<"~B"<<endl;};
}
class Derived:public Base{
public:
virtual ~Derived(){cout<<"~D"<<endl;};
}
void main (){
Base *b=new Derived();
delete b;
} 这时,基类和派生类对象都能被析构掉。
本文探讨了C++中基类与派生类对象在不同指针类型指向时的析构行为。具体分析了三种情况:基类指针、派生类指针以及基类虚拟析构函数对派生类的影响。
888





