标签:include 原则 style IV nbsp 运算 virt 基类 技术分享
1 //虚析构函数的学习 2 //如果外部程序使用new运算符定义了动态对象,则当外部程序结束时,要使用delete运算符删除该动态对象. 3 //但是如果外部程序利用赋值兼容原则,把动态申请的派生类对象地址赋给了基类对象指针,由于delete运算符隐含有析构函数的自动调用 4 //因此此时系统自动调用的必定是基类的析构函数,这就有可能引起内存泄漏问题 5 //下面是虚析构函数的例子 6 #include<iostream.h> 7 #include<string.h> 8 9 class A{ 10 public: 11 A(){} 12 // ~A(){ 13 // cout<<"基类析构函数"<<endl; 14 // } 15 16 virtual ~A(){ 17 cout<<"基类析构函数"<<endl; 18 } 19 20 }; 21 22 class AA:public A{ 23 private: 24 char *aa; 25 int length; 26 public: 27 AA(char *message){ 28 length=strlen(message)+1; 29 aa=new char[length]; 30 strcpy(aa,message); 31 } 32 ~AA(){ 33 delete aa; 34 cout<<"派生类析构函数"<<endl; 35 } 36 37 }; 38 39 int main(){ 40 A *pa=new AA("hello"); 41 delete pa; 42 return 0; 43 } 44 45 //由这个例子说明 46 //凡是派生类的构造函数中或派生类的其他成员函数中有用运算符new动态申请内存空间的,则其基类的析构函数必须设计成虚析构函数
标签:include 原则 style IV nbsp 运算 virt 基类 技术分享
原文地址:https://www.cnblogs.com/Tobi/p/9250739.html