1。虚析构函数:ios
层次的根开始,沿着继承路径逐个调用基类的构造函数函数
确析构动态对象 spa
派生类动态对象也能够正确地用delete析构设计
可以使派生类对象在不一样状态下正确调用指针
析构函数code
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 //virtual ~A() //定义析构函数为虚析构函数时,使用基类真正引用派生类对象后,正确的调用了派生类的析构函数,释放了全部资源 8 ~A() 9 { 10 cout << "A::~A() is called!\n"; 11 } 12 }; 13 class B:public A 14 { 15 public: 16 ~B() 17 { 18 cout << "B:~B() is called!\n"; 19 } 20 }; 21 void main() 22 { 23 //用基类指针创建派生类的动态对象 24 A *a = new B(); 25 //用派生类指针创建派生类的动态对象 26 B *b = new B(); 27 cout << "delete first object:\n"; 28 //析构有基类创建的派生类对象,没有调用派生的析构函数 29 delete a; 30 cout << "delete secod object:\n"; 31 //析构有派生类创建的派生类对象,正确的调用了派生类的析构函数 32 delete b; 33 }
1 #include <iostream> 2 using namespace std; 3 4 class A 5 { 6 public: 7 //virtual ~A() //定义析构函数为虚析构函数时,使用基类真正引用派生类对象后,正确的调用了派生类的析构函数,释放了全部资源 8 ~A() 9 { 10 cout << "A::~A() is called!\n"; 11 } 12 }; 13 class B:public A 14 { 15 public: 16 ~B() 17 { 18 cout << "B:~B() is called!\n"; 19 } 20 }; 21 void main() 22 { 23 //用基类指针创建派生类的动态对象 24 A *a = new B(); 25 //用派生类指针创建派生类的动态对象 26 B *b = new B(); 27 cout << "delete first object:\n"; 28 //析构有基类创建的派生类对象,没有调用派生的析构函数 29 delete a; 30 cout << "delete secod object:\n"; 31 //析构有派生类创建的派生类对象,正确的调用了派生类的析构函数 32 delete b; 33 }