web-dev-qa-db-ja.com

Shared_ptr NULLをブーストします

Shared_pointerのデフォルト値としてreset()を使用しています(NULLと同等)。

しかし、shared_pointerがNULLかどうかを確認するにはどうすればよいですか?

これは正しい値を返しますか?

boost::shared_ptr<Blah> blah;
blah.reset()
if (blah == NULL) 
{
    //Does this check if the object was reset() ?
}
27
Yochai Timmer

使用する:

if (!blah)
{
    //This checks if the object was reset() or never initialized
}
34
Ralph

if blah == NULLは正常に動作します。一部の人はブール値(if !blah)より明示的であるため。他の人は後者が短いので後者を好みます。

11
ymett

ポインタをブール値としてテストできます。nullでない場合はtrueに、nullの場合はfalseに評価されます。

if (!blah)

boost::shared_ptrstd::tr1::shared_ptrはどちらもセーフブールイディオムを実装しており、C++ 0xのstd::shared_ptrは明示的なbool変換演算子を実装しています。これらは、特定の状況でshared_ptrをブール値として使用できるようにします。これは、通常のポインタをブール値として使用する方法と同様です。

9
James McNellis

に示すように boost::shared_ptr<> 's documentation 、ブール変換演算子が存在します:

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
}
7
ildjarn