如何返回null tr​​1 :: shared_ptr并测试它是否为null

时间:2010-09-01 07:28:23

标签: c++ smart-pointers

我有一个带有以下签名的函数getA()

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

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

并且,我希望在同一情况下在getA()中返回一个空指针;此外,作为Class B的用户,我需要在使用它之前测试getA()的返回值是否为null。我该怎么办?

1 个答案:

答案 0 :(得分:5)

请注意,A::Ptr在您的示例中是私有的。你应该修理它。

返回空指针:

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

检查一下:

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