109.虚函数与析构构造

 1 #include <iostream>
 2 using namespace std;
 3 
 4 //构造函数不可以是虚函数,如果是虚函数子类对象中的父类拷贝无法初始化
 5 //继承的本质就是子类中间包含父类对象
 6 //析构是从子类析构然后父类析构,如果是多态并且子类中有分配内存,
 7 //父类对象用子类初始化,则需要把析构函数设成virtual
 8 
 9 class myclass
10 {
11 public:
12     char *p;
13 
14     virtual void go()
15     {
16         cout << "myclass" << endl;
17     }
18 
19     myclass()
20     {
21         p = new char[1024 * 1024 * 100];
22     }
23 
24     virtual ~myclass()
25     {
26         delete[] p;
27     }
28 };
29 
30 class classX :public myclass
31 {
32 public:
33     int *p;
34     classX()
35     {
36         p = new int[1024 * 1024 * 100];
37     }
38     ~classX()
39     {
40         delete[] p;
41     }
42 };
43 
44 void main()
45 {
46     myclass *p = new classX;
47 
48     //父类对象用子类初始化,如果析构函数不是virtual则不能调用子类的析构,会造成内存泄漏
49     //加了virtual则会先调用子类的析构再调用父类的析构
50     delete p;
51 
52     cin.get();
53 }

 

posted @ 2018-03-19 21:17  喵小喵~  阅读(115)  评论(0编辑  收藏  举报