c++中的智能指针auto_ptr

来源:互联网 发布:拼车app软件 编辑:程序博客网 时间:2024/05/29 17:33

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在第二次打印的时候并没有被销毁,故打印成功;

原创粉丝点击