boost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。
上一段代码,以及其输出:
1 #include <string> 2 #include <iostream> 3 #include <boost/scoped_ptr.hpp> 4 5 class implementation 6 { 7 public: 8 ~implementation() { std::cout <<"destroying implementation\n"; } 9 void do_something() { std::cout << "did something\n"; } 10 }; 11 12 void test() 13 { 14 boost::scoped_ptr<implementation> impl(new implementation()); 15 impl->do_something(); 16 } 17 18 void main() 19 { 20 std::cout<<"Test Begin ... \n"; 21 test(); 22 std::cout<<"Test End.\n"; 23 }
输出结果是:
Test Begin ...
did something
destroying implementation
Test End.
可以看到:当implementation类离其开impl作用域的时候,会被自动删除,这样就会避免由于忘记手动调用delete而造成内存泄漏了。
boost::scoped_ptr特点:
boost::scoped_ptr的实现和std::auto_ptr非常类似,都是利用了一个栈上的对象去管理一个堆上的对象,从而使得堆上的对象随着栈上的对象销毁时自动删除。不同的是,boost::scoped_ptr有着更严格的使用限制——不能拷贝。这就意味着:boost::scoped_ptr指针是不能转换其所有权的。
boost::scoped_ptr和std::auto_ptr的选取:
boost::scoped_ptr和std::auto_ptr的功能和操作都非常类似,如何在他们之间选取取决于是否需要转移所管理的对象的所有权(如是否需要作为函数的返回值)。如果没有这个需要的话,大可以使用boost::scoped_ptr,让编译器来进行更严格的检查,来发现一些不正确的赋值操作。
Boost智能指针——scoped_ptr,布布扣,bubuko.com
原文:http://www.cnblogs.com/chengyeliang/p/3817690.html