智能指针&&深拷贝浅拷贝

 

智能指针

将原生指针封装成对象,来解决堆上内存泄漏的问题。

  • 为什么要使用智能指针:

智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。

当栈对象生存周期结束,智能指针会调用析构函数释放之前申请的内存,从而避免内存泄漏。

智能指针是类,一定要有operator*和operator->();*传回所指的对象,->调用对象的成员。

  • C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被11弃用。
  •   auto_ptr:拥有严格对象所有权语义的智能指针;

      shared_ptr:拥有共享对象所有权语义的智能指针;

      weak_ptr:到 shared_ptr 所管理对象的弱引用;

      unique_ptr:拥有独有对象所有权语义的智能指针。

  • C++11常用的智能指针有shared_ptr,它采用计数的方法,记录当前内存被几个智能指针引用。计数内存在堆上分配。

当新增一个引用时,计数+1;失去一个引用,计数-1.

当引用为0,智能指针自动释放申请的内存资源。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值