《C++标准程序库》读书笔记 2012-07-07 auto_ptr 禁止隐式转换
2012-07-07 09:22
281 查看
《C++标准程序库》4.2.1和4.2.2节描述auto_ptr不允许隐式转换,如下所示:
auto_ptr可以拿来当作另外一个auto_ptr的初值,如上所示普通指针是不行的
查看auto_ptr的声明,可知auto_ptr的构造是explicit的:
所以不允许隐式的将new ClassA指针构造成一个临时的auto_ptr对象,然后再赋值给ptr2。
这种强制的语法还是有必要的,可以避免将普通指针隐式的转换,导致auto_ptr析构的时候delete错误。
#include <memory> std::auto_ptr<ClassA> ptr1(new ClassA); //OK std::auto_ptr<ClassA> ptr2 = new ClassA; //ERROR
auto_ptr可以拿来当作另外一个auto_ptr的初值,如上所示普通指针是不行的
查看auto_ptr的声明,可知auto_ptr的构造是explicit的:
template<class _Ty> class auto_ptr { // wrap an object pointer to ensure destruction public: typedef _Ty element_type; explicit auto_ptr(_Ty *_Ptr = 0) _THROW0() : _Myptr(_Ptr) { // construct from object pointer }
所以不允许隐式的将new ClassA指针构造成一个临时的auto_ptr对象,然后再赋值给ptr2。
这种强制的语法还是有必要的,可以避免将普通指针隐式的转换,导致auto_ptr析构的时候delete错误。
相关文章推荐
- 《C++标准程序库》读书笔记 2012-07-12 auto_ptr_ref记录
- 使用隐式转换auto_ptr导致程序崩溃原因
- 《C++标准程序库》读书笔记 2012-07-08 auto_ptr 作为参数传递
- IDEA的auto import 与 Scala的隐式转换
- IDEA的auto import 与 Scala的隐式转换
- The C++ Standard Library : A Tutoral and Reference 读书笔记之auto_ptr
- explicit 禁止隐式转换
- 读书笔记--抑制构造函数定义隐式转换
- explicit构造函数禁止隐式转换
- auto_ptr、shared_ptr、weak_ptr、scoped_ptr用法小结
- c++智能指针:std::auto_ptr
- scala中的隐式转换详解
- C++标准库中简单智能指针auto_ptr的模仿实现源码
- 前端面试 - js隐式类型转换特殊实例
- C++中的隐式类型转换
- 隐式类类型转换
- 神秘的auto_ptr
- C++定义隐式转换函数,将类转换为内部的一个成员变量
- 智能指针shared_ptr, auto_ptr, scoped_ptr, weak_ptr总结