c++ auto_ptr笔记
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页
版权声明:本文为博主原创文章,未经博主允许不得转载。