C++中的智能指针

参考:http://www.cnblogs.com/lanxuezaipiao/p/4132096.html

1.auto_ptr:独占,但是如果赋值给别的指针的话,原先的就没了,并且没有提示。

 1   auto_ptr<string> films[5] =
 2  {
 3     auto_ptr<string> (new string("Fowl Balls")),
 4     auto_ptr<string> (new string("Duck Walks")),
 5     auto_ptr<string> (new string("Chicken Runs")),
 6     auto_ptr<string> (new string("Turkey Errors")),
 7     auto_ptr<string> (new string("Goose Eggs"))
 8  };
 9  auto_ptr<string> pwin;
10 (断点处) pwin = films[2]; // films[2] loses ownership. 将所有权从films[2]转让给pwin,此时films[2]不再引用该字符串从而变成空指针

结果如下:

所以上面的写法是非常容易出错误的,当引入新的指针进来的时候数组元素就丢失了所有权,推荐用shared_ptr。
2.shared_ptr:非独占。可以多个指针指向同一个内容。

 1 shared_ptr<string> films[5] =
 2 {
 3   shared_ptr<string>(new string("Fowl Balls")),
 4   shared_ptr<string>(new string("Duck Walks")),
 5   shared_ptr<string>(new string("Chicken Runs")),
 6   shared_ptr<string>(new string("Turkey Errors")),
 7   shared_ptr<string>(new string("Goose Eggs"))
 8 };
 9 shared_ptr<string> pwin;
10 pwin = films[2]; 

结果如下:

3.unique_ptr:独占,不同于auto_ptr.

1 unique_ptr<string>p_unique_ptr_1 (new string("unique_ptr test"));
2 
3 unique_ptr<string>p_unique_ptr_2;
4 
5 p_unique_ptr_2=p_unique_ptr_1;//编译报错,因为unique_ptr没有复制构造函数 而auto_ptr在这里是不会报错的。

 

4.scoped_ptr: 永远不能被复制或被赋值!scoped_ptr拥有它所指向的资源的所有权,并永远不会放弃这个所有权;

5.weak_ptr:

posted on 2016-03-18 17:39  真.新手上路  阅读(185)  评论(0)    收藏  举报

导航