2011-04-10 10 views
25

Estoy usando reset() como valor predeterminado para mi shared_pointer (equivalente a NULL).boost Shared_pointer NULL

Pero, ¿cómo puedo comprobar si el shared_pointer es NULL?

¿Esto devolverá el valor correcto?

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

Respuesta

33

Uso:

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

puede simplemente probar el puntero como un valor lógico: se evaluará a true si no es nulo y false si es nulo:

if (!blah) 

boost::shared_ptr y std::tr1::shared_ptr ambos implementan la expresión de idioma seguro y C++ 0x std::shared_ptr implementan explícitamente bool c operador de inversión. Estos permiten que se use shared_ptr como booleano en ciertas circunstancias, similar a como los punteros comunes se pueden usar como booleanos.

5

Como se muestra en boost::shared_ptr<> 's class synopsis, existe un operador seguro-bool:

operator unspecified-bool-type() const; // never throws 

lo tanto, utilizar la shared_ptr<> como si se tratara de un bool:

if (!blah) 
{ 
    // this has the semantics you want 
} 
9

if blah == NULL no tendrán ningún problema . Algunas personas lo preferirían sobre las pruebas como bool (if !blah) porque es más explícito. Otros prefieren este último porque es más corto.

Cuestiones relacionadas