C++学习(24)

 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动态申请内存空间的,则其基类的析构函数必须设计成虚析构函数

猜你喜欢

转载自www.cnblogs.com/Tobi/p/9250739.html
今日推荐