在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
中定义了一些将其转换为布尔值的函数?
答案 0 :(得分:14)
shared_ptr
有operator 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 - 测试是否存在自有资源。