当前位置:C++技术网 > 资讯 > Boost简单学习:3 智能指针的作用域指针

Boost简单学习:3 智能指针的作用域指针

更新时间:2015-11-13 21:29:37浏览次数:1+次

    我们怎么使用这个呢?对应的类名为boost::scoped_ptr,它的定义在boost/scoped_ptr.hpp中。不像std::auto_ptr,一个作用域 指针不能传递它所包含的对象的所有权到另一个作用域指针。一旦用一个地址来初始化,这个动态分配的对象将在析构阶段释放。因为一个作用域指针只是简单保存 和独占一个内存地址,所以boost::scoped_ptr的实现就要比std::auto_ptr简单。在不需要所有权传递的时候应该优先使用 boost::scoped_ptr。在这些情况下,比起std::auto_ptr它是一个更好的选择,因为可以避免不经意间的所有权传递。下面这个例 子简单描述了scope_ptr的使用方法:


 #include <boost/scoped_ptr.hpp>    
    int main()   
    {   
      boost::scoped_ptr<int> i(new int);   
      *i = 1;   
      *i.get() = 2;   
      i.reset(new int);   
     return 0;
    }   

    一经初始化,智能指针boost::scoped_ptr所包含的对象可以通过类似于普通指针的接口来访问。这是因为重载了相关的操作符 operator*(),operator->() 和 operator bool()。此外,还有get和reset方法。前者返回所含对象的地址,后者用一个新的对象来重新初始化智能指针。在这种情况下,新创建的对象赋值之 前会先自动释放所包含的对象。

    boost::scoped_ptr的析构函数中使用delete操作符来释放所包含的对象。这对 boost::scoped_ptr所包含的类型加上了一条重要的限制。它不能用动态分配的数组来做初始化,因为这需要调用delete[]来释放。在这种情况下,可以使用boost:scoped_array类。当然之后的文章会给你们详细介绍一下这个类的使用。