关于智能指针 auto_ptr

来源:互联网 发布:java 抽象工厂模式 编辑:程序博客网 时间:2024/05/17 04:35

1、设计动机:
  在函数中通常要获得一些资源,执行完动作后,然后释放所获得的资源,当程序员忘记释放所申请的到的资源,或者由于异常发生而没有正常释放资源时,这就将产生一系列的内存泄漏问题。

2、主要函数
  (1) reset 函数
     重设需要管理的指针,首先 auto_ptr 会删除当前管理的对象,然后再设置新的对象的指针。
     Point *p1 = new Point(1.0,2.0);
     Point *p2 = new Point(2.0,3.0);
    
     auto_ptr<Point>pstr;
     pstr.reset(p1);
     pstr.reset(p2);            // 删除 p1 对象,然后将 pstr 指向 p2
   (2) release 函数
       释放所有权,返回它管理的指针,不删除指针指向的对象:
    auto_ptr<Point> pstr(p1.release()); // 等同于下句
    auto_ptr<Point> pstr(p2);           // 等同于上句

3、注意事项
  (1) auto_ptr不能指向数组。
  (2) auto_ptr不能作为容器的成员。
  (3) 由于auto_ptr 的构造函数被定义为了explicit,故不能通过赋值操作来初始化 auto_ptr
      auto_ptr<Point> pstr(new Point(1.0,2.0));     //OK
      auto_ptr<Point> pstr = new Point(1.0,2.0);    //ERROR
  (4) 如果被管理的类的析构函数为私有的,那么将无法使用 auto_ptr。
  (5) 尽量不要在参数中使用auto_ptr指针,也不要通过引用传递auto_ptr。
   
4、示例代码


/********************************
作者: zgl_dm
日期; 2010-06-07
描述: 智能指针 auto_ptr 实例
blog: http://blog.csdn.net/zgl_dm
*********************************/

运行结果如下:

原创粉丝点击