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.
该get方法auto_ptr没有前提条件。
auto_ptr这意味着,无论对象处于什么状态,调用该方法总是安全的。
将此与operator*成员函数进行对比,成员函数确实有一个前提条件get() != 0。C++ 标准在Requires子句中指定成员函数的前提条件。如果函数不存在这样的子句,则调用始终是安全的。