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 }