|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #define _CRT_SECURE_NO_WARNINGS
- #include "iostream"
- using std::endl;
- using std::cin;
- using std::cout;
- class A
- {
- private:
- char* p;
- public:
- A()
- {
- p = new char[20];
- strcpy(p, "obja");
- cout << "A()\n";
- }
- public:
- virtual ~A()
- {
- if (p != NULL)
- {
- delete[] p;
- }
- cout << "~A()\n";
- }
- };
- class B :public A
- {
- private:
- char* p;
- public:
- B()
- {
- p = new char[20];
- strcpy(p, "objb");
- cout << "B()\n";
- }
- public:
- ~B()
- {
- if (p != NULL)
- {
- delete[] p;
- }
- cout << "~B()\n";
- }
- };
- class C :public B
- {
- private:
- char* p;
- public:
- C()
- {
- p = new char[20];
- strcpy(p, "objc");
- cout << "C()\n";
- }
- public:
- ~C()
- {
- if (p != NULL)
- {
- delete[] p;
- }
- cout << "~C()\n";
- }
- };
- //只执行了父类的析构函数
- void howToDelete(A* base)//想通过基类指针释放子类对象
- {
- delete base;//这句话不会表现出多态的属性
- //想通过父类指针把所有的子类对象的析构函数(释放所有子类资源),都执行一遍 只能用虚析构函数
- //通过子类对象释放资源,不需要写virtual
- }
- void main()
- {
- C* myc = new C;
- howToDelete(myc);//这一句 为啥释放子类的对象就,就把所有的对象都给释放了
- system("pause");
- }
复制代码
为啥释放子类的对象就,就把所有的对象都给释放了
你的函数里头的注释不是写的很清楚明白吗
一般来说不会选择强制转换成父类进行析构
|
|