我使用reset()
作为我的shared_pointer的默认值(相当于NULL
)。
但是如何检查shared_pointer是否为NULL
?
这会返回正确的值吗?
boost::shared_ptr<Blah> blah;
blah.reset()
if (blah == NULL)
{
//Does this check if the object was reset() ?
}
答案 0 :(得分:34)
使用:
if (!blah)
{
//This checks if the object was reset() or never initialized
}
答案 1 :(得分:11)
if blah == NULL
可以正常使用。有些人更倾向于将其作为bool(if !blah
)进行测试,因为它更明确。其他人更喜欢后者,因为它更短。
答案 2 :(得分:9)
您可以将指针作为布尔值进行测试:如果它为非空,它将评估为true
,如果为空,则评估为false
:
if (!blah)
boost::shared_ptr
和std::tr1::shared_ptr
都实现了safe-bool习惯用法,而C ++ 0x std::shared_ptr
实现了一个明确的bool
转换运算符。这些允许在某些情况下将shared_ptr
用作布尔值,类似于普通指针可用作布尔值的方式。
答案 3 :(得分:7)
如boost::shared_ptr<>
的{{3}}所示,存在一个布尔转换运算符:
explicit operator bool() const noexcept;
// or pre-C++11:
operator unspecified-bool-type() const; // never throws
因此,只需使用shared_ptr<>
,就好像它是bool
:
if (!blah) {
// this has the semantics you want
}