1. 简介
scoped_ptr是boost库提供的很类似auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确地删除。在实现上都是利用了一个栈上的对象去管理一个堆上的对象,从而使得堆上的对象随着栈上的对象销毁时自动删除。但scoped_ptr的所有权更加严格,不能转让,并且永远不能被复制或赋值,一旦scoped_ptr获取了对象的管理权,你就无法再从它那里取回来。
因此,在实际编程中是使用scoped_ptr还是auto_ptr,就需要根据它们的不同点进行选择。如果,根据你的设计是否需要转移所有权。如果需要那么就使用auto_ptr,如果不需要那么就使用scoped_ptr。scoped_ptr是一种轻量级的智能指针;使用它不会使你的程序变大或变慢。它只会让你的代码更安全,更好维护。
因此,在实际编程中是使用scoped_ptr还是auto_ptr,就需要根据它们的不同点进行选择。如果,根据你的设计是否需要转移所有权。如果需要那么就使用auto_ptr,如果不需要那么就使用scoped_ptr。scoped_ptr是一种轻量级的智能指针;使用它不会使你的程序变大或变慢。它只会让你的代码更安全,更好维护。
2. 实现分析
下面我们看下boost::scoped_ptr类的成员函数,熟悉boost::scoped_ptr提供了哪些方法给我们。
namespace boost
{
template<class T> class scoped_ptr // noncopyable
{
private:
T * px;
scoped_ptr(scoped_ptr const &);
scoped_ptr & operator=(scoped_ptr const &);
typedef scoped_ptr<T> this_type;