auto_ptr

47 篇文章 0 订阅
本文,记录auto_ptr

设计来源:
     某函数退出时,本地变量都将被从堆内存中删除。因此,指针ps占据的内存将被释放,如果ps指向的内存也被释放,那将实现自动回收垃圾的机制。这意味着希望程序在ps过期时采用另一项额外的措施。简单来说,就是:类似new,却不需要担心delete问题。
     对于基本类型,并没有提供这种额外的服务,但对于类,则可以通过析构函数机制来提供。
     因此,ps的问题在于:它只是一个常规指针,不是类对象。如果它是对象,则可以在对象过期时,让它的析构函数删除被指向的内存。
     这正是auto_ptr背后的思想。

实现:
     auto_ptr是一种智能指针(smart pointer),类似于指针,但特性比指针多。需要实现其像指针一般的操作:解引用、递增、访问结构成员、赋予相同类型指针。

包含头文件:memory

存在问题:
  1. auto_ptr使用new,则使用delete删除,所以不能使用new []创建
  2. 不能使用于非堆内存
  3. 两个auto_ptr同时指向同一对象,不加处理,则对该对象进行两次释放

处理做法:
  1. 定义赋值操作符,使之执行深拷贝。这样两个指针将指向不同对象,其中一个对象是另一个对象的拷贝。
  2. 建立所有权概念,对于特定的对象,只能由一个智能指针可拥有它。智能指针的构造函数只能删除该指针拥有的对象。并使复制操作转让所有权。
  3. 创建智能更高的指针,跟踪引用特定对象的智能指针数。这被称为引用计数。仅当最后一个指针过期时,delete才被调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值