如果条件,shared_ptr如何工作

时间:2011-08-29 06:22:07

标签: 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;
} 

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

2 个答案:

答案 0 :(得分:14)

shared_ptroperator unspecified-bool-type() const,允许在布尔上下文中使用它。 unspecified-bool-type 通常被定义为指向函数的指针或指向成员函数的指针,以禁止意外匹配bool函数重载。

C++0x中,成语是使用explicit operator bool() const;,它禁止隐式转换(例如函数调用,转换为int进行算术运算等等),但仍然允许{ {1}}在布尔上下文中转换为bool。

答案 1 :(得分:2)

shared_ptr有operator bool(),如果它不为空,则返回true。

例如,这是Microsoft实现的shared_ptr :: operator bool():http://msdn.microsoft.com/en-us/library/bb982901.aspx

shared_ptr :: operator boolean-type - 测试是否存在自有资源。