scoped_ptr

scoped_ptr

1.scoped_ptr所管理的指针,所有权不能被转让。scoped_ptr的拷贝构造函数和赋值操作符都声明为了私有,这样scoped_ptr不能进行复制操作,其所含指针就不能改变所有权。

2.提供了*和->操作符的重载,这样操作scoped_ptr对象可以像操作原始指针一样方便,但不能进行比较、自增、自减等操作。
3.因为scoped_ptr不支持拷贝和赋值操作,所以scoped_ptr不能作为STL容器的元素。

 1  #include  " stdafx.h "
 2  #include  < string >
 3  #include  < vector >
 4  #include  < iostream >
 5  #include  < boost / smart_ptr.hpp >
 6  using   namespace  boost;
 7  using   namespace  std;
 8 
 9  int  _tmain( int  argc, _TCHAR *  argv[])
10  {
11       //  1.用法,在构造的时候,接受new表达式结果
12      scoped_ptr < string >  sp( new   string ( " Test scope ptr " ));
13 
14       //  2.模拟指针的操作
15      cout << sp -> size() << endl;
16      cout <<* sp << endl;
17 
18       //  3.不能进行比较、自增、自减,转移指针等操作
19       //  ++sp;   //  错误
20       //  scoped_ptr<string> sp1 = sp; 构造函数为私有函数
21 
22       //  4.不能作为stl容器的元素
23       //  vector<scoped_ptr<string> > vecSP;  //  可以通过
24       //  vecSP.pop_back(sp);                 //  错误,因为scoped_ptr不支持拷贝和赋值
25 
26       //  5.不能转移所管理的指针的所有权
27      auto_ptr < string >  ap( new   string ( " Test auto ptr " ));
28      scoped_ptr < string >  sp2(ap);
29      assert(ap. get () == 0 );
30      ap.reset( new   string ( " new test " ));
31      cout <<* sp2 << endl <<* ap << endl;
32 
33       return   0 ;
34  }




 

 

你可能感兴趣的:(scoped_ptr)