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页
版权声明:本文为博主原创文章,未经博主允许不得转载。
最新文章
- mac 10.11.6 自带apache配置记录
- [BZOJ2391]Cirno的忧郁
- ldap实现用户认证
- hdu 2586 How far away
- php中curl模拟浏览器来传输数据
- MariaDB链接超时优化
- iOS快速单例宏
- 洛谷P1204 [USACO1.2]挤牛奶Milking Cows
- POJ 3164 Command Network 最小树形图模板
- linux定时任务crond那些事!
- mac安装GNU命令行工具
- HDU 5352 MZL&#39;s City
- JS框架设计读书笔记之-小知识
- 一个比喻讲明Docker是什么
- ve2.0 v-for循环报错的解决方案
- TXMLDocument 创建空值节点不要缩写
- pyqt5 添加属性-类方法用属性形式访问
- ActiveMQ 到底是推还是拉?
- windows mfc 程序,不同程序通信和互斥
- loglevel-metamask