web-dev-qa-db-fra.com

boost Shared_ptr NULL

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() ?
}
27
Yochai Timmer

Utilisation:

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

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.

11
ymett

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.

9
James McNellis

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