C++智能指针

(这只是在下的粗浅理解,不足的地方还请谅解,欢迎留言提出,后期理解深入后会加以改进奋斗

为什么会有只智能指针:

    由于C++没有自动的内存回收机制,每次new出来的内存都要手动delete,而有时候很容易会遗忘掉delete这一过程,因此会造成严重的后果

    智能指针其实就是定义一个类,指向一块内存空间,在被异常打断时,智能指针声明周期结束,然后自动调用析构函数释放该空间,以保证不会发生内存泄漏。

常用的几种智能指针:

auto_ptr

    std::auto_ptr可以用来管理单个对象的堆内存,当有两个指针指向同一个内存时,第一个指针将不会再指向该内存,相当于第一个指针将管理权交给了第二个指针,也就是说同时只能有一个指针指向该内存

注意:

    1、尽量不要使用“operator=”

    2、release()函数不会释放对象,仅仅是归还所有权

    3、std::auto_ptr最好不要当成参数传递

    4、最好不要使用该指针

scoped_ptr

    scoped_ptr也可以同auto_ptr一样的正常使用,但是没有release()函数,所以不会导致内存泄漏的问题,其次scoped_ptr是独享所有权的,因此不会有auto_ptr的一些问题,是建议多使用的。

shared_ptr

shared_ptr可以很方便的使用,也没有release()函数,并且在其内部维护了一个引用指针,由此可以支持复制、参数传递等,其中提供的use_count(),此函数返回其内部的引用计数,也就是说该指针是专门用于共享所有权的。


weak_ptr

    weak_ptr指针是专门为shared_ptr而准备的,在有的情况下,我们只需要关注使用对象,而不想改变其引用计数,则使用weak_ptr,它相当于shared_ptr的观测者,只会对其进行引用而不会改变其引用计数,当然在shared_ptr失效后,weak_ptr也会失效。

总结:

    1、在可以使用boost库的情况下,就不要使用auto_ptr,容易出现错误

    2、如果对象无需共享,则使用scoped_ptr

    3、如果对象需要共享,则使用shared_ptr

    4、如果需要访问shared_ptr对象,而又不要改变其引用计数的情况下,则使用weak_ptr,一般常用于软件   框架设计

    5、如果使用了智能指针,则在代码中千万不要出现delete关键字


该文章借鉴

    https://blog.csdn.net/xt_xiaotian/article/details/5714477

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值