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

《C++标准程序库》读书笔记 2012-07-07 auto_ptr 禁止隐式转换

2012-07-07 09:22 281 查看
《C++标准程序库》4.2.1和4.2.2节描述auto_ptr不允许隐式转换,如下所示:

#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++ object c