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() ?
}
使用する:
if (!blah)
{
//This checks if the object was reset() or never initialized
}
if blah == NULL
は正常に動作します。一部の人はブール値(if !blah
)より明示的であるため。他の人は後者が短いので後者を好みます。
ポインタをブール値としてテストできます。nullでない場合はtrue
に、nullの場合はfalse
に評価されます。
if (!blah)
boost::shared_ptr
とstd::tr1::shared_ptr
はどちらもセーフブールイディオムを実装しており、C++ 0xのstd::shared_ptr
は明示的なbool
変換演算子を実装しています。これらは、特定の状況でshared_ptr
をブール値として使用できるようにします。これは、通常のポインタをブール値として使用する方法と同様です。
に示すように 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
}