C++11 智能指针——(C++98)auto_ptr

本文详细介绍了C++98中的智能指针auto_ptr,包括其设计理念、特性以及使用注意事项。强调了auto_ptr的拥有权唯一性,不能在STL容器中使用,以及初始化和所有权转移的细节。同时,通过示例展示了直接用非堆内存指针初始化auto_ptr可能导致的问题和潜在风险。
摘要由CSDN通过智能技术生成

    lofter地址:http://willkall.lofter.com/

    C++11从boost库中引入了unique_ptr, shared_ptr, weak_ptr,并舍弃了c98的auto_ptr。

    一、c++98 auto_ptr(参见《C++标准程序库》——孟岩/侯捷译)

    C++标准程序库描述:“auto_ptr是一种智能指针,帮助程序员防止'被异常抛出时发生资源泄露'”。它在对象析构的时候自动释放资源,并模仿了原始指针的操作,重载了operator*和operator->,允许程序员向使用原始指针一样使用auto_ptr(但是没有重载所有的指针算术运算),并减少程序员显示的处理异常发生时代码的复杂度与失误。

    注意:auto_ptr是严格的拥有权类智能指针,使用时注意以下几点

  1. auto_ptr之间不能共享拥有权
  2. auto_ptr对象通过赋值或构造转移拥有权,一旦拥有权转移,此auto_ptr所拥有的将是一个原始指针
  3. auto_ptr不适用于array
  4. auto_ptr不满足STL对容器元素的要求,因此不适用于STL容器。因为在拷贝和赋值之后,新的auto_ptr和旧的auto_ptr对象并不相等。
  5. 如果要阻止拥有权的转移,则应该在停止转移之前,将auto_ptr声明为const
  6. 不要使用auto_ptr的引用作为实参:因为你不知道拥有权到底有没有转移。如果你不需要转移拥有权,请使用const auto_ptr<class> &

  1.auto_ptr的初始化

        auto_ptr不允许使用一般的指针赋值来初始化,必须使用其构造函数来初始化。因为“根据一般指针生成一个auto_ptr”的那个构造函数被声明为explicit(禁止单参构造函数用于自动型别转换)

std::auto_ptr<ClassA> ptr1(new ClassA);//OK
std::auto_ptr<ClassA> ptr2 = new ClassA;//ERROR

    2.auto_ptr拥有权转移
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值