当auto_ptr未初始化时,get()是否可靠?

时间:2016-08-23 13:42:07

标签: c++ c++03 auto-ptr

请考虑以下代码:

std::auto_ptr<std::string> p;

if (p.get() == 0) {
   ...
}

get()成员函数是否是检查p尚未初始化的标准且可靠的方法?它是否总是返回0,不管平台,编译器,编译器的优化标志等等?

3 个答案:

答案 0 :(得分:11)

没有未初始化std::auto_ptr default constructor初始化指向0的指针:

explicit auto_ptr( X* p = 0 );

因此get()将有效地返回&#34; 0&#34;在默认构造的std::auto_ptr上。

答案 1 :(得分:3)

该行

std::auto_ptr<std::string> p;

致电the constructor

explicit auto_ptr (X* p=0) throw();

将内部指针初始化为0。

因此,它取决于你所说的“尚未初始化”。如您所示,调用默认的ctor将产生返回0的get。同时将其初始化为其他内容,然后调用reset(0),将产生返回0的get

答案 2 :(得分:1)

get的{​​{1}}方法没有先决条件。

这意味着,无论auto_ptr对象处于什么状态,调用该方法总是安全的。

将此与auto_ptr成员函数进行对比,该函数的前提条件为operator*。 C ++标准为 Requires 子句中的成员函数指定了前提条件。如果函数没有这样的子句,则可以安全地调用。