C++学习笔记:虚析构函数
来源:互联网 发布:淘宝新店第一天刷几单 编辑:程序博客网 时间:2024/06/07 19:46
我们直接上案例:
// 虚析构函数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;#pragma warning(disable:4996)class A{public:A(){p = new char[20];strcpy(p,"obja");printf("A()\n");}~A(){delete[]p;printf("~A()\n");}private:char *p;};class B:public A{public:B(){p = new char[20];strcpy(p,"objb");printf("B()\n");}~B(){delete[]p;printf("~B()\n");}private:char *p;};class C :public B{public:C(){p = new char[20];strcpy(p, "objc");printf("C()\n");}~C(){delete[]p;printf("~C()\n");}private:char *p;};void howtoDelete(A *base){delete base;}int _tmain(int argc, _TCHAR* argv[]){C *myC = new C;//new出来一个对象 howtoDelete(myC);//delete掉这个对象return 0;}
这个时候执行的结果是:
我们看到并没有执行B和A的析构函数。仅仅执行了父类的析构函数。因为这个时候没有虚函数,是静态联编,因此是什么类型就调用什么方法,不会根据类型兼容性原则来
当我们想通过父类指针 把所有的子类对象的 析构函数 都执行一遍
意思就是想通过父类指针 释放所有的子类资源
这种情况 只能使用虚析构函数。
// 虚析构函数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;#pragma warning(disable:4996)class A{public:A(){p = new char[20];strcpy(p,"obja");printf("A()\n");}virtual ~A(){delete[]p;printf("~A()\n");}private:char *p;};class B:public A{public:B(){p = new char[20];strcpy(p,"objb");printf("B()\n");}~B(){delete[]p;printf("~B()\n");}private:char *p;};class C :public B{public:C(){p = new char[20];strcpy(p, "objc");printf("C()\n");}~C(){delete[]p;printf("~C()\n");}private:char *p;};void howtoDelete(A *base){delete base;}int _tmain(int argc, _TCHAR* argv[]){C *myC = new C;//new出来一个对象 howtoDelete(myC);//delete掉这个对象//detele myC;//也可以直接通过子类对象释放资源 不需要写virtualreturn 0;}
0 0
- C++:函数<学习笔记>
- C学习笔记之函数
- C/C学习笔记/函数与程序结构
- c++Primer学习笔记(7)--函数
- C++Template学习笔记之函数模板
- C++pirmer 学习笔记之函数定义
- C语言学习笔记(九)--函数
- 《C和指针》学习笔记四/函数/
- IOS学习笔记06---C语言函数
- Object-C 学习笔记(三)---函数function
- 【C语言学习笔记】qsort函数总结
- c++primer学习笔记5 - 函数
- C和指针 学习笔记-4.函数
- C/C++学习笔记10:内联函数
- C/C++学习笔记17:函数指针
- C++primer学习笔记之函数
- 【C++】【学习笔记】【006】函数的重载
- C++Primer学习笔记(7)函数
- Android为什么选择binder
- 无法定位程序输入点 于动态链接QtCore4.dll库上
- Alternating Current
- Android 6.0 fork Zygote时的存储权限管理
- 在release(发布app)中屏蔽NSLog输出语句
- C++学习笔记:虚析构函数
- Android4.4的zygote进程
- 【CSS3】matrix
- Xcode中archive打包的时候,出现you are not allowed to perform this operation.please..问题
- 关于微信SDk的方法(1)
- linux下如何查看文件权限
- 深入浅出ClassLoader测试代码
- activity向另一个activity中的fragment传值
- 学习android前言:爱上编程