c语言析构函数的作用,详解析构函数出现的必要性

详解析构函数出现的必要性

输入输出需要内存!

传统C语言应对策略

申请动态内存的好处

析构函数闪亮登场

什么是析构函数:

析构函数的好处:

wuli康康的参考资料

输入输出需要内存!

同学你好,你已经学了用scanf,cin指令进行输入输出 。但如果你想输入一篇英文文章是否也可以用这两种指令呢?答案是否定的,每台电脑都会有自己的随机处理器(RAM),下面是我的电脑参数:

d501bc5a6f30d617cc613808e74c0960.png

我们可以发现我的电脑有16G的内存,但这16G只会有很小的一部分分给Dev-C++,打开任务管理器内存分配可见一斑,能够scanf和cin调用的仅约1M左右。80aaaa2a332035a76686897159e61ea8.png

传统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.

不妥之处请多多指教!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值