发布技术文章,文章内首/尾句带关键词“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 27 天,点击查看活动详情”
前言
不知道大家有没有听过这样一句话:一个c++程序员,内存泄漏了,一包烟,一杯茶,一下午,码神本来不信这句话,直到今天,我领悟了内存泄漏的危险情况,所以临时更新一次
一、c++操作内存的优点与缺点
如果有学过其他语言的应该知道,C++给我们的可操作性实在太大了,它让我们可以操作内存,高性能随之而来,但是天使与恶魔总是共存的,来了操作内存,内存泄漏也随之而来,像今天的码神一样,哭了 所以内存的操作也可能导致一些最隐蔽的bug出现 例如:
- 内存耗尽——死机
- 出现一些隐藏的bug——不知道什么时候出错
二、内存操作
1.指针
提到内存操作,我感觉非插一句指针不行,有时间我单独更新一期指针,今天先简单说一下,具体等指针单独说,原谅我的困 指针:首先指针是一个变量,其储存的是值的地址,而不是其值本身, 例如:int *a=10,,a就是地址,*a为10
泄漏1:
int *a; *a=123; 这就是一个入门级的指针泄漏,a是一个指针但是他没有被初始化,但它指向哪里呢?so它可能指向任何地址,可能有任何值,如果a恰好指向100,那么它可能就不是储存123的地方,这可能在当时没有太大问题,但是埋下了恶魔的种子。
所以我建议:在对指针应用解引用操作符”*“时,将指针初始化为一个确定的,适当的地址
2.开辟新空间——new
如果说指针是一个坑,那么new一定是让你对他又爱又恨,天使的温柔,恶魔的报复。
内存泄漏2:
就是这个new,写说一下简单用法:
int *a=new int ;//分配一块内存给a
*a=123;//a的数值=123;
为什么会出现内存耗尽的情况? 计算机可能没有充足的空间来满足new的请求此时:delete就出现了,释放内存
delete a;//释放a的内存
这里的内存泄漏主要出现在析构函数上 注意,如果函数结束没有主动释放new的内存,new是会一直占用,直到程序结束,所以有个编码习惯就是new和delete一起使用,其中用delete在析构函数中释放内存
总结
好了,说了也不少,感觉如果要写内存还是要单独开一期指针,欢迎大家补充一下,你们遇到的内存泄漏,我再加更上去,谢啦! 总结一下吧:
- new和delete一起使用
- 在对指针应用解引用操作符”*“时,将指针初始化为一个确定的,适当的地址
原创不易,欢迎三连,白天再写几个实例