标签:
1。虚析构函数:
层次的根开始,沿着继承路径逐个调用基类的构造函数
确析构动态对象
派生类动态对象也可以正确地用delete析构
能够使派生类对象在不同状态下正确调用
析构函数
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 }
标签:
原文地址:http://www.cnblogs.com/Smart-Du/p/4336232.html