c++中的智能指针auto_ptr
2010-04-20 23:39
441 查看
auto_ptr有一个特性就是转移控制权是一个比较有意思的功能;智能指针在在进行拷贝操作或者赋值操作(=)的时候,都会把所包含的指针的控制权转移到新的变量上去,而变量会指向一个空指针;
这次的结果是str第二次打印的时候失败,因为str_ptr被传递给形参p,然后形参p获得了改智能指针的拥有权,而str_ptr失去了拥有权。
但是p没有在函数中北传出,在函数调用结束的时候,生命周期结束,所以str被delete;于是第二次打印str的时候,失败;
与实例1相反,p在函数调用的时候结束,传递给一个temp智能指针返回,temp在
auto_ptr<string> str_ptr2=getNOreturnPtr(str_ptr);
这句话结束的时候会被销毁,但是他同时把智能指针的拥有权转至给str_ptr2,因此,在打印第二次str变量的时候,str并没有被销毁,因此成功;
实例3str第二次打印的时候仍然成功的原因在于因为形参是进行的引用传值,因此auto_ptr在整个函数过程中并没有任何拥有权转让操作,因此str在第二次打印的时候并没有被销毁,故打印成功;
#include <memory> #include <string> #include <iostream> #include <utility> void getNOreturnPtr(auto_ptr<string> p){ cout << *p << " prt value" << endl; } int main(int args,char *argc[]){ string str="corey string"; auto_ptr<string> str_ptr(&str); getNOreturnPtr(str_ptr); cout << str << "prt value 2" << endl; }
这次的结果是str第二次打印的时候失败,因为str_ptr被传递给形参p,然后形参p获得了改智能指针的拥有权,而str_ptr失去了拥有权。
但是p没有在函数中北传出,在函数调用结束的时候,生命周期结束,所以str被delete;于是第二次打印str的时候,失败;
#include <memory> #include <string> #include <iostream> #include <utility> auto_ptr<string>getNOreturnPtr(auto_ptr<string> p){ cout << *p << " prt value" << endl; return p; } int main(int args,char *argc[]){ string str="corey string"; auto_ptr<string> str_ptr(&str); auto_ptr<string> str_ptr2=getNOreturnPtr(str_ptr); cout << str << "prt value 2" << endl; }
与实例1相反,p在函数调用的时候结束,传递给一个temp智能指针返回,temp在
auto_ptr<string> str_ptr2=getNOreturnPtr(str_ptr);
这句话结束的时候会被销毁,但是他同时把智能指针的拥有权转至给str_ptr2,因此,在打印第二次str变量的时候,str并没有被销毁,因此成功;
void getNOreturnPtr(auto_ptr<string>& p){ cout << *p << " prt value" << endl; } int main(int args,char *argc[]){ string str="corey string"; auto_ptr<string> str_ptr(&str); getNOreturnPtr(str_ptr); cout << str << "prt value 2" << endl; }
实例3str第二次打印的时候仍然成功的原因在于因为形参是进行的引用传值,因此auto_ptr在整个函数过程中并没有任何拥有权转让操作,因此str在第二次打印的时候并没有被销毁,故打印成功;
相关文章推荐
- 浅谈C++的智能指针(auto_ptr)
- C++智能指针之auto_ptr
- [转载]C++的智能指针auto_ptr做了些什么
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- C++ auto_ptr智能指针
- C++中的资源管理(一):构造自己的auto_ptr与shared_ptr智能指针
- [转]C++智能指针(auto_ptr)详解
- C++智能指针--auto_ptr指针
- C++ auto_ptr 智能指针的用法
- 以对象管理资源——C++智能指针auto_ptr简介
- C/C++:智能指针原理(运算符重载)、使用auto_ptr<A>
- C++:智能指针_auto_ptr_vs版本
- C++智能指针:auto_ptr、shared_ptr、weak_ptr等
- 【C/C++】智能指针auto_ptr,share_ptr,unique_ptr
- C++ - 智能指针 Vs. auto_ptr
- 【C++】智能指针的作用,模拟实现auto_ptr,scoped_ptr,shared_ptr,scoped_array,shared_array
- C++智能指针,指针容器原理及简单实现(auto_ptr,scoped_ptr,ptr_vector).
- C++ auto_ptr智能指针的用法
- C++智能指针auto_ptr
- 【C++智能指针 auto_ptr】