c语言析构函数的作用,详解析构函数出现的必要性
详解析构函数出现的必要性
输入输出需要内存!
传统C语言应对策略
申请动态内存的好处
析构函数闪亮登场
什么是析构函数:
析构函数的好处:
wuli康康的参考资料
输入输出需要内存!
同学你好,你已经学了用scanf,cin指令进行输入输出 。但如果你想输入一篇英文文章是否也可以用这两种指令呢?答案是否定的,每台电脑都会有自己的随机处理器(RAM),下面是我的电脑参数:
我们可以发现我的电脑有16G的内存,但这16G只会有很小的一部分分给Dev-C++,打开任务管理器内存分配可见一斑,能够scanf和cin调用的仅约1M左右。
传统C语言应对策略
#include //调用malloc函数的头文件
s=(char*) malloc(128*sizeof(char));//用malloc函数申请动态内存
free(s);//释放空间
对代码的解释:
由于malloc函数返回值为void,为空类型指针,而s是字符型指针,直接赋值可能会报错。故在其前加上强制类型转换(char*)。
有时候我们不记得申请字符所占字节数,故这里使用sizeof();
128*代表申请128个char类型地址空间。
最后动态内存程序结束后并不会自己释放,造成内存泄漏,需要调用free()进行释放。
申请动态内存的好处
char m_szname1[25]; //申请长度为25的char数组
m_szname2=(char*) malloc(255);
char * m_szname2; //申请一个char类型的指针
free(m_szname2);
对代码的解释:
第一种方式申请char类型数组会限定其大小,此题m_szname1至多容纳25个字符。
第二种申请一个指针,指向一个字符串,则指针不会限定字符串的长度
由于指针必须指向地址,则需提前用malloc申请指针的动态内存。
程序不会自主释放动态内存,需要调用free进行释放。
有没有感觉malloc很厉害
析构函数闪亮登场
什么是析构函数:
1、析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间。
2、析构函数如果我们不写的话,C++ 会帮我们自动的合成一个,就是说:C++ 会自动的帮我们写一个析构函数。很多时候,自动生成的析构函数可以很好的工作,但是一些重要的事迹,就必须我们自己去写析构函数。
3、按照 C++ 的要求,只要有 new 就要有相应的 delete 。这个 new 是在构造函数里 new 的,就是出生的时候。所以在死掉的时候,就是调用析构函数时,我们必须对指针进行 delete 操作。
析构函数的好处:
他某种程度上类似free()函数,不过是对构造函数申请的动态内存的清理,但我们注意到free()函数的使用是需要人为判断人为调用的,这需要程序编写者自己判断什么时候不再需要申请的动态内存,要求较高。而析构函数会在构造函数结束后由编译器自行调用,释放动态内存,可见其优越性。
wuli康康的参考资料
你可以找到更多关于heap,malloc和free的信息,请点 here.
你可以找到更多关于new与delete创建对象的信息,请点 here.
不妥之处请多多指教!
c语言析构函数的作用,详解析构函数出现的必要性相关推荐
- c语言while函数作用,详解C语言中的while语句
什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...
- c语言fclose函数作用,详解C语言中freopen()函数和fclose()函数的用法
C语言freopen()函数:打开文件函数,并获得文件句柄 头文件: #include 定义函数: FILE * freopen(const char * path,const char * mode ...
- c语言for表达式1的作用,C语言for语句用法详解
C语言for语句用法详解 C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面小编给大家介绍C语言f ...
- java文档注释定界符_c语言的注释定界符详解
c语言的注释定界符详解 c语言的注释定界符是什么 1.最早期的C语言注释是:/* */ 2.后来又增加的行注释:// 其中/**/是多行注释,//是单行注释. 需要注意的是:C 语言的注释并不是可以出 ...
- Linux(centos)系统各个目录的作用详解
转自:Linux(centos)系统各个目录的作用详解 现在公司的服务器使用CentOS系统,在网上找到了这篇介绍linux各个目录的文章,觉得十分不错,所以拿来存个档. 整理之后如下: 文件系统的类 ...
- c语言 is函数,关于C语言回调函数的详解~
原标题:关于C语言回调函数的详解~ 01 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义.我在百度上搜了一下, ...
- 【C】C语言格式输入函数scanf()详解
参考了:C语言格式输入函数scanf()详解 总述 scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中. scanf函数的一般形式 scanf函数是一个标准库函数,它 ...
- C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)
C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...
- C语言-入门级别函数详解
C语言-入门级别函数详解 写在开始 关于函数 1. 函数的定义形式 2.函数的声明 3. 返回语句 4.函数参数 4.1 形式参数(传值调用) 4.2 实际参数(传址调用) 4.3无参数 5.函数的调 ...
- 程序人生 | C语言字节对齐问题详解 - 对齐/字节序/位序/网络序等(上)
本文首发于 2014-07-21 15:32:28 1. 引言 考虑下面的结构体定义: typedef struct{char c1;short s; char c2; int i; }T_FOO; ...
最新文章
- 我玩《王者荣耀》、斗地主、打麻将,但我是正经搞AI的北大教授
- beanstalkd 协议中文版
- LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
- 工作336:uni-ele-el-table修改宽度问题
- boost::asio async_write也不能保证一次发完所有数据 一
- ASP.NET MVC传递Model到视图的多种方式之通用方式的使用
- oracle取时间最近的一条数据_当数据库最近一直卡顿时,第一时间应该用这条sql来分析...
- 在ECSHOP模板商品列表页 显示商品的评论等级和评论数量
- Update Remote Files 1.0
- spring oracle数据源配置,spring的多数据源配置(spring+ibatis + oracle环境下)
- MCSA Server 2012 R2 Passthrough Disk
- 清华大学python教材怎么样_经典!清华大学计算机系教材曝光:《Python编程金典》...
- Hearbeat + Nginx 安装配置
- Python函数调用的九大方法,鲜为人知
- 一篇文章告诉你雅虎这20年经历了什么
- 【运筹帷幄】关于阿里云服务器自己开启的6010端口
- 【计算社会科学01】为何病菌屡屡将人类推向死神?人类该如何应对
- 美国大学生数学建模竞赛获奖经验贴
- [N1CTF 2022] solve_pow,baby_N1ES
- 从Google表格中的字符串中提取多个特定长度的数字子串的解决思路
热门文章
- vue中使用快递鸟打印订单
- HTML5 之 Link 标签
- The transaction timeout is larger than the maximum value allowed by the broker
- 彻底解决tplink路由器无法访问部分https网站
- 计算机电脑怎么开热点,图解电脑怎么开热点wifi——广传攻柴
- .Net学习平台有很多,最快捷的是在这里?
- HTTP 417 错误 Expectation Failed
- 高考476分在浙江计算机学院,2021年高考476分左右能上什么大学(100所)
- android 路由跟踪,手机移动端网络路由跟踪探测方式
- 美团构建实时数仓的痛点是什么?如何解决?