您的位置:首页 > 编程语言 > C语言/C++

c++ auto_ptr笔记

2015-08-03 22:05 405 查看
1.auto_ptr 不可以使用指针惯用的赋值初始化方式,只能直接初始化。

示例:

char *p = 'A';//error

auto_ptr<char>ptr = new char;//error,被当作普通指针对待了

auto_ptr<char>ptr4 = auto_ptr<char>(new char);//ok

auto_ptr<char>ptr4 = auto_ptr<char>(new char[100]);//ok

使用下面方式:

#include<memory>

auto_ptr<char>ptr(new char);//ok

auto_ptr<char>ptr = new char;//error

或者

auto_ptr<char>ptr(new char);

auto_ptr<char>ptr1;

ptr1 = ptr;//ok

2.下面两种情况是有区别的:

X x;

Y y(x);//显示转换

和:

X x;

Y y = x;//隐式转换

3.auto_ptr的操作经常以下模式进行:

(1).获取一些资源

(2).执行一些动作

(3).释放所获取的资源

如果一开始获取的资源被绑定于局部对象上,当函数退出时,它们的析构函数被调用,从而自动释放这些资源。

4.auto_ptr拥有权只能有一次,当交出拥有权的时候,就不再拥有它。

auto_ptr<char>ptr(new char);

auto_ptr<char>ptr1(ptr);//交出拥有权后ptr为NULL

这样在释放的时候ptr1自动释放一次就可以了。

5.函数使用

auto_ptr<char> f()

{

auto_ptr<char>ptr(new char);

return ptr;

}

6.auto_ptr参数传递的注意事项

示例:

auto_ptr<char> f()

{

auto_ptr<char>ptr(new char);

return ptr;

}

void bad_printf(auto_ptr<char>p)

{

if(p.get() == NULL){

cout<<"NULL"<<endl;

}

else{

cout<<*p;

}

}

auto_ptr<char>ptr4 = f();//分配一个指针

*ptr4 = 'C';//指针赋值

bad_printf(ptr4);//ptr4将拥有权交给p, 则ptr4为NULL

*ptr4 = '7';//将字符7赋值给值为NULL的ptr4,将出现运行期错误

72页
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: