【白话杂谈 No.1】浅谈C++中资源管理的那些事

前言

相信C/C++是不少同学的编程母语,而其中的指针和内存空间管理必定或多或少地困扰过每一个C/C++的学习者,毕竟C++作为一种底层性的语言,并没有如Java和Python一样便利的垃圾回收机制,在实际的程序设计中无时无刻都得注意资源的管理,毫不夸张地说,进行C++的资源管理就如同在十字路口进行没有红绿灯辅助的交通管制,一旦没有处理好,轻则内存泄露,重则机器爆炸,博主本人就曾因为一次粗心的失误导致数十G的流量当场燃烧,机器卡死,望各位引以为戒,至少在WIFI环境下尝逝(,这样自由的资源管理反而成了C++同学们一直苦恼的问题之一。


C++引入的一系列补正:

实际上,C++标准已经为此引入了许多“新玩意”来缓解大家的痛苦了,比如C++11/14中就给出的许多新特性如著名的智能指针,这里浅谈一下这部分内容——智能指针,顾名思义,是一种能够智能管理资源的指针,使用C++模板类实现,能够兼容几乎所有的数据类型(包括设计者的自定义类型),具体来说分为std::auto_ptr<>(已经弃用)、std::unique_ptr<>、std::shared_ptr<>、std::weak_ptr<>这四大类,它们的功能通俗来讲就是利用引用次数机制进行内存的管理,主要运用于RAII思想中,什么?你不知道什么是引用次数和RAII?没关系,这里也一并简单讲解一下。

引用次数——学C++的同学一定要知道的一个东西就是引用,你可以将其理解为给变量“取别名”,如下:

int m_a = 10;

int& m_b = m_a;

std::cout << m_b << std::endl;

结果会看到终端上输出了一个“10”,你可能会说:“这有什么用吗,我不用引用一样会得到这个结果啊?”。

诶,别急,你再加上这么一行后输出试试~

std::cout << "m_b的地址为:" << &m_b << std::endl << "m_a的地址为:" << &m_a << std::endl;

不出意外的话你会看见两个变量的地址是一样的,这就是为什么在前面说这类似于“取别名”了,因为引用操作并不是进行了一套复制操作,而是让一个空间能够被多个变量指向,看上去就像是这部分空间有多个名字了。

那有了这个玩意儿后能有什么用呢?嚯哟,这就说来话长了,比如我们这说的只是左值引用,还有右值引用等,有兴趣的同学可以通过献祭自己的头发再深入研究一下,这里仅解释一下引用次数这个概念。其实也就是字面意思,智能指针内部会进行计数,也就是说智能指针会记录自己所管理的那部分空间的被引用次数,智能指针之所以“智能”,就是其会根据特定情况管理资源的释放,具体来说就是利用引用次数进行管理,如果一个空间的引用次数为0,那么就代表着我们不需要它了,智能指针自己会懂事地释放这部分空间的,这就在很大程度上保护了我方C++程序猿的发际线,真是太乖了~

而RAII的全名其实就是“资源获取即初始化技术”,别看这东西听起来挺高大上的,其实也就是一种规范性的思想而已,用人话来说就是“在构造函数的时候申请空间,在析构函数的时候释放空间”,毕竟叫大家去“记得”delete自己new出来的空间实在是不太现实(懒狗+健忘症患者默默举手),所以还不如把资源跟对象的生命周期绑在一起,以减小程序猿犯病时带来的损失。

后话:

说了这么一堆玩意儿,在实际开发中其实还是要靠咱们自己的细心和规范化操作,毕竟上手操作的是人,全给机器或者cv干了咱也可以当场退休了,而且这也只是C++之海中的一小部分内容而已,更多细节碍于篇幅和形式就不多说了,毕竟这只是一次白话杂谈(实际上是因为博主太菜了),剩下的就留给各位自行研究和讨论吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值