#include <iostream>
#include <cstring>
using namespace std;
class A{
public:
A(){ p(); }
virtual void p(){ cout << "a" << endl; }
~A(){ p(); }
};
class B :public A{
public:
B(){ p(); }
void p(){ cout << "B" << endl; }
~B(){ p(); }
};
int main(int, char**){
A* a = new B();
delete a;// a B a 此时派生类没有被释放
cout << "********" << endl;
B *b = new B();
delete b;// a B B a 当释放派生类时,先释放基类,后释放派生类。
return 0;
}
给A类中析构函数是虚函数时
#include <iostream>
#include <cstring>
using namespace std;
class A{
public:
A(){ p(); }
virtual void p(){ cout << "a" << endl; }
virtual ~A(){ p(); }
};
class B :public A{
public:
B(){ p(); }
void p(){ cout << "B" << endl; }
~B(){ p(); }
};
int main(int, char**){
A* a = new B();
delete a; // a B B a
cout << "********" << endl;
B *b = new B();
delete b;
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
class A{
public:
A(){ p(); }
virtual void p(){ cout << "a" << endl; }
virtual ~A(){ p(); }
};
class B :public A{
public:
B(){ p(); }
void p(){ cout << "B" << endl; }
~B(){ p(); }
};
int main(int, char**){
cout << "********" << endl;
A c; //a
cout << "********" << endl;
B d; // a B
cout << "********" << endl;
A* a = new B(); //a B
delete a; //B a
cout << "********" << endl;
B *b = new B(); //a B
delete b; //B a
return 0; // B a(先释放d对象的析构) a(再释放c对象的析构)
}
// 其中 对象c、d是在return 0时释放的。