C++学习——STL内存管理

这里介绍了一种很好的关于STL容器进行大容量动态内存管理的方法:【C++】动态内存管理(五)使用STL容器进行大量的动态内存管理

介绍的内容有几层,首先第一个是:

        对于STL容器vector,比如经常采用的是一种拷贝构造的方式进行的push_back(),意思是由于vector申请的空间不是很大,所以如果不指定大小,那么可能内存就只能存放一个对象。

所以其实这就涉及到,指定申请空间大小的问题,转向到:C++STL对象指定内存空间大小

这样新的对象添加的时候,就涉及到寻找更大连续内存的问题,移动拷贝对象,释放之前的内存空间,然后再添加,这样的效率就不是很高

一个解决方法,就是用指针代替传入的拷贝的副本,但是这样的问题就是当我们使用的STL容器的生命周期结束的时候,内部指针所指向的对象并不会被析构掉,即存在内存泄露的问题,这就可以转向到另外一个链接:C++如何造成以及如何避免内存泄露 以及

C++如何对内存泄漏进行检查(我是辣鸡,我是傻逼,5555),还有一个检测工具,在linux环境下的,看着还比较好用C/C++ 内存泄漏检测工具:Valgrind

然后文章给的一个解决思路就是,使用智能指针,智能指针的确是效率和复杂度和普通指针是一样的,而且会智能动态的释放掉指向的资源对象。文中给的智能指针使用的是shared_ptr,

--------------------------以下分割线摘录自原文---------------------------------------------------

shared_ptr在非环状数据结构中可以很好的发挥其特性,防止资源泄露,让资源都能得到很好的释放和管理。

做一下总结,说明为什么最好要在vector中放shared_ptr:

防止直接放对象时,push_back() 一个new出来的源对象之后,忘记去delete掉源对象导致内存泄漏
shared_ptr可以很好的保证你new出来的内容都能很好的被释放掉
shared_ptr采用引用计数的方式,就算被push_back()的源shared_ptr已经析构掉了,但是其保留的资源还存在于vector的内部shared_ptr指针上,不用担心资源被不小心释放
放shared_ptr可以实现多态,而放普通对象不行,普通指针则不好管理内存的分配和释放
 

 --------------------------以上分割线摘录自原文---------------------------------------------------

文中介绍的内存管理都是用顺序容器vector进行举例的,那关联容器的效果呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

量化橙同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值