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

Mar*_*arc 6 c++ auto-ptr c++03

请考虑以下代码:

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

if (p.get() == 0) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

Hol*_*olt 11

没有未初始化的std::auto_ptr东西,默认构造函数将指针初始化为0:

explicit auto_ptr( X* p = 0 );
Run Code Online (Sandbox Code Playgroud)

因此get()0在默认构造上有效地返回" " std::auto_ptr.


Com*_*sMS 1

get方法auto_ptr没有前提条件。

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

将此与operator*成员函数进行对比,成员函数确实有一个前提条件get() != 0。C++ 标准在Requires子句中指定成员函数的前提条件。如果函数不存在这样的子句,则调用始终是安全的。