auto_ptr

本文详细介绍了C++智能指针auto_ptr的工作原理,包括如何将已有指针传递给它、智能指针间的控制权转移、复制构造与赋值行为。重点讲解了auto_ptr的独占控制权及其在函数参数传递和内存管理中的特性。
摘要由CSDN通过智能技术生成
  • 使用方法
    • #include <memory>
      
      
      /*
      将已经存在的指针作为构造参数
      */
      int *p = new int(33);
      auto_ptr<int> api(p);
      
      /*直接构造智能指针*/
      auto_ptr<int> api(new int(33));
      
      /*拷贝构造*/
      auto_ptr<string> api1(new string("wonderful"));
      auto_ptr<string> api2(api1);
      /*一块动态内存只能由一个智能指针拥有,因此拷贝时发生控制权转移,api1失去内存拥有权,api2获得内存拥有权,且对象销毁时,由api2负责内存的自动销毁*/
      
      /*赋值*/
      auto_ptr<int> api1(new int(2048));
      auto_ptr<int> api2(new int(1024));
      api1 = api2;
      /*由api1所指向的对象被销毁,api1指向原来api2所指向的内存,其值为2048,api2不再指向原内存空间*/

       

    • auto_ptr独占控制权,不能由两个智能指针指向同一块内存空间(原因:删除时两个对象都尝试删除一块内存,造成错误)
    • auto_ptr不能作为函数参数传递,会在传参数时,将内存控制权交给局部变量(函数结束后被删除),而原来的智能指针失去它的拥有权。
    •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值