如果条件,shared_ptr如何工作

Yog*_*rma 10 c++ shared-ptr

在C++中,我可以编写如下内容:

shared_ptr<A> a_sp = someFunctionReturningSharedPtr();
if (a_sp) {
    cout << a_sp->someData << endl;
} else {
    cout << "Shared Pointer is NULL << endl;
} 
Run Code Online (Sandbox Code Playgroud)

为什么if (a_sp)检查工作正常?a_sp不是布尔值,但如何检查true或false?if条件如何知道检查a_sp.get()函数的结果?或者,如果没有,是怎么NULL了的,两者均a_sp检查?是否有shared_ptr定义的函数将其转换为布尔值?

Man*_*rse 15

shared_ptr有一个operator unspecified-bool-type() const允许它在布尔上下文中使用.所述非指定bool型通常被定义为一个函数指针,或指向成员函数,以禁止偶然匹配为bool函数过载.

C++0x习惯用法中explicit operator bool() const;,它禁止隐式转换(例如函数调用,转换int为算术等),但仍然允许shared_ptr在布尔上下文中转换为bool.