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:
浙公网安备 33010602011771号