智能指针,stl中有auto_ptr,boost的smart_ptr库有6种:
scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和intrusive_ptr.
scoped_ptr的拷贝构造函数和赋值操作符声明为私有,以禁止对智能指针的复制。
例1:
#include <boost/smart_ptr.hpp> #include <iostream> #include <string> using namespace std; using namespace boost; int main() { scoped_ptr<string> sps(new string("Hello Boost")); cout<<sps->size()<<endl; cout<<*sps<<endl; return 0; }
输出
11
Hello Boost
例2:
#include <boost/smart_ptr.hpp> #include <iostream> #include <string> using namespace std; using namespace boost; struct tag_file { tag_file(const char *file_name) { cout<<"open file:"<<file_name<<endl; } ~tag_file() { cout<<"close file"<<endl; } }; int main() { scoped_ptr<int> spi(new int); if (spi) //用bool语境测试 { *spi = 100; cout<<*spi<<endl; } spi.reset(); assert(spi == 0); if (!spi) { cout<<"scoped_ptr == null"<<endl; } scoped_ptr<tag_file> spf(new tag_file("a.txt")); return 0; }
输出
100
scoped_ptr == null
open file:a.txt
close file