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 }