unique_ptr优于auto_ptr的原因
来源:互联网 发布:守望先锋网络初始化 编辑:程序博客网 时间:2024/06/05 08:18
第一个原因
请看一段使用auto_ptr的代码:
//使用auto_ptr不当的后果int main(){ auto_ptr<int> aptr1(new int); auto_ptr<int> aptr2(new int); *aptr1 = 3; aptr2 = aptr1; cout << *aptr2 << endl; cout << *aptr1 << endl; //运行阶段错误,aptr1已移交控制权 cin.get();}
aptr1将控制权移交给aptr2,然而编译阶段并不认为输出*aptr1是错误的,
然而编译阶段错误总比运行阶段错误要好
再看一段使用unique_ptr的代码:
int main(){ unique_ptr<int> uptr1(new int); unique_ptr<int> uptr2(new int); *uptr1 = 7; uptr2 = uptr1; //编译阶段错误,不允许这种赋值 cin.get();}
unique_ptr的指针不允许上述赋值,因为uptr1之后的操作可能会导致运行阶段失败
unique_ptr只允许右值赋值,因为右值会立即过期,不会有意想不到的操作
这也是unique_ptr优于auto_ptr之处
*ps : 顺便一提,auto_ptr类没有重载==去判断是否是nullptr,而unique_ptr可以与nullptr进行比较
*如果想将unique_ptr赋值给其他unique_ptr,可以使用std::move()函数
第二个原因
- auto_ptr只能和new使用,不能与new[]一起使用,因为他只有delete而**没有**delete[]
- unique_ptr可以与new[]使用,因为他有delete[]
0 0
- unique_ptr优于auto_ptr的原因
- auto_ptr VS unique_ptr
- auto_ptr与unique_ptr
- Ajax优于JSF的原因
- C++11 auto_ptr shared_ptr unique_ptr
- Ajax优于JSF的几个原因讨论
- Ajax优于JSF的几个原因讨论
- 通俗描述IPv6优于IPv4的原因
- 关于std:auto_ptr std:shared_ptr std:unique_ptr
- C++ 智能指针学习 auto_ptr, unique_ptr 。。。
- 浅谈智能指针auto_ptr/shared_ptr/unique_ptr
- 【C++】智能指针auto_ptr/unique_ptr/shared_ptr/weak_ptr!!!
- 【C/C++】智能指针auto_ptr,share_ptr,unique_ptr
- java 日志记录使用slf4j优于log4j的原因
- 智能指针:从std::auto_ptr到std::unique_ptr
- auto_ptr、shared_ptr、unique_ptr 几句代码你就懂了
- 智能智能(auto_ptr,unique_ptr,shared_ptr)(更新中。。。)
- auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解
- Android项目密码框显示明文
- IPython,让Python显得友好十倍的外套——windows XP/Win7安装详解
- ASP.NET中绑定数据控件OnClientClick事件Eval函数解析错误的处理
- java总结
- TFS Express backup and restore
- unique_ptr优于auto_ptr的原因
- 第十题
- JSF探索--ajax应用
- poj 3061 Subsequence 【尺取法 or STL lower_bound】
- 几种单例模式 尤其Initialization on demand holder模式
- Android 音乐播放器的实现
- 应用编程之守护进程
- Objective-C语法快速参考
- HTML style