J'utilise reset()
comme valeur par défaut pour mon shared_pointer (équivalent à un NULL
).
Mais comment puis-je vérifier si le pointeur partagé est NULL
?
Cela rendra-t-il la bonne valeur?
boost::shared_ptr<Blah> blah;
blah.reset()
if (blah == NULL)
{
//Does this check if the object was reset() ?
}
Utilisation:
if (!blah)
{
//This checks if the object was reset() or never initialized
}
if blah == NULL
fonctionnera bien. Certaines personnes préféreraient cela à un test booléen (if !blah
) car c'est plus explicite. D'autres préfèrent ce dernier car il est plus court.
Vous pouvez simplement tester le pointeur comme un booléen: il sera évalué à true
s'il n'est pas nul et false
s'il est nul:
if (!blah)
boost::shared_ptr
et std::tr1::shared_ptr
implémentent tous deux l'idiome Safe-bool et le C++ 0x std::shared_ptr
implémente un opérateur de conversion explicite bool
. Ceux-ci permettent un shared_ptr
être utilisé comme booléen dans certaines circonstances, de la même manière que les pointeurs ordinaires peuvent être utilisés comme booléens.
Comme représenté sur la boost::shared_ptr<>
's documentation , il existe un opérateur de conversion booléen:
explicit operator bool() const noexcept;
// or pre-C++11:
operator unspecified-bool-type() const; // never throws
Utilisez donc simplement le shared_ptr<>
comme s'il s'agissait d'un bool
:
if (!blah) {
// this has the semantics you want
}