2010-09-01 10 views
2

J'ai une fonction getA() avec la signature suivante:comment retourner un TR1 null :: shared_ptr et test si elle est nulle

class A { 
public: 
typedef std::tr1::shared_ptr <A> Ptr; 
//other member functions.... 
}; 

class B { 
public: 
A::Ptr getA(); 
}; 

Et, je veux retourner un pointeur vide getA() en même cas; Aussi, en tant qu'utilisateur de Class B, j'ai besoin de tester si la valeur de retour de getA() est nulle avant de l'utiliser. Comment dois-je le faire?

Répondre

5

Notez que A::Ptr est privé dans votre échantillon. Vous devriez le réparer.

Pour retourner un pointeur vide:

A::Ptr B::getA() 
{ 
    // ... 
    if (something) return A::Ptr(); // return empty shared_ptr 
    else return something_else; 
} 

Pour le vérifier:

int test() 
{ 
    B b; 
    A::Ptr p = b.getA(); // getA is private too, but suppose it will not 
    if (p) { /* do something */ } 
}