Consider the following code:
std::auto_ptr<std::string> p;
if (p.get() == 0) {
...
}
get()
成员函数是一种标准且可靠的方法,用于检查 p
是否已被初始化吗?无论平台、编译器、编译器优化标志等是否存在,它是否总是返回 0?
不存在未初始化的 std::auto_ptr
,默认构造函数会将指针初始化为 0
:
explicit auto_ptr( X* p = 0 );
因此,get()
在默认构造的 std::auto_ptr
上将有效地返回 "0
"。
auto_ptr
的 get
方法没有前提条件。
这意味着,无论 auto_ptr
对象处于什么状态,调用该方法始终是安全的。
与此相反,operator*
成员函数具有 get() != 0
的前提条件。C++标准在 Requires 子句中为成员函数指定前提条件。如果没有此类子句,则始终可以安全地调用该函数。