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很厉害
析构函数闪亮登场
什么是析构函数:molloc函数
1、析构函数(destructor) 与构造函数相反,当对象结束其⽣命周期时(例如对象所在的函数已调⽤完毕),系统⾃动执⾏析构函数。析构函数往往⽤来做“清理善后” 的⼯作(例如在建⽴对象时⽤new开辟了⼀⽚内存空间。
2、析构函数如果我们不写的话,C++ 会帮我们⾃动的合成⼀个,就是说:C++ 会⾃动的帮我们写⼀个析构函数。很多时候,⾃动⽣成的析构函数可以很好的⼯作,但是⼀些重要的事迹,就必须我们⾃⼰去写析构函数。
3、按照 C++ 的要求,只要有 new 就要有相应的 delete 。这个 new 是在构造函数⾥ new 的,就是出⽣的时候。所以在死掉的时候,就是调⽤析构函数时,我们必须对指针进⾏ delete 操作。
析构函数的好处:
他某种程度上类似free()函数,不过是对构造函数申请的动态内存的清理,但我们注意到free()函数的使⽤是需要⼈为判断⼈为调⽤的,这需要程序编写者⾃⼰判断什么时候不再需要申请的动态内存,要求较⾼。⽽析构函数会在构造函数结束后由编译器⾃⾏调⽤,释放动态内存,可见其优越性。
wuli康康的参考资料
你可以到更多关于heap,malloc和free的信息,请点 here.
你可以到更多关于new与delete创建对象的信息,请点 here.
不妥之处请多多指教!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。