提升Shared_ptr NULL

时间:2011-04-10 08:10:52

标签: c++ boost shared-ptr smart-pointers

我使用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() ?
}

4 个答案:

答案 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_ptrstd::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
}