【智能指针-c++内存管理】

智能指针

c/c++最为人诟病的是内存的管理,确保正确的时间,释放掉正确的内存,很难。c++11开始,新的库提供了智能指针,可以自动的管理内存,释放对象占用的内存。

shared_ptr

是一个模板,使用跟指针也几乎没什么差别
shared_ptr p (new string(“abc”));
指向string的指针p
另外可以使用make_shared(q) 来创建一个指向q的智能指针

原理:智能指针内部有个关联的计数器,无论是拷贝还是初始化或者传参等等,计数器都会递增(ps,具体实现不一定是一个计数)一旦计数器变为0,则它会自动释放自己管理的对象,析构,释放内存。

当指向一个对象的最后一个shared _ptr被销毁时,它会调用它所管理对象的析构函数来完成销毁工作。

note:

当shared_ptr 无用之后,注意不要再保留,否则内存会一直不被销毁,消耗内存。
当然局部变量的shared_ptr会自动销毁,但是如果是一个vector等,中间进过了remove等操作,一定要记得,这些值不要忘记销毁,比如erase等操作

unique_ptr

只能有一个unique_ptr指向一个对象

weak_ptr

指向一个shared_ptr管理的对象,但是不增加引用计数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值