C++ 避免共享ptr重定向

C++ 避免共享ptr重定向,c++,shared-ptr,C++,Shared Ptr,我将共享ptr和对共享对象的引用存储在包装器中。有人看到内存泄漏的可能性吗?只是小心点 class B; class A { public : typedef shared_ptr< B > PB; A( PB pb ) : m_pb( pb ), m_b( *pb ) { } void someFunc() { // do something with m_b } PB getB() { return m_pb;

我将共享ptr和对共享对象的引用存储在包装器中。有人看到内存泄漏的可能性吗?只是小心点

class B;
class A
{
public :
  typedef shared_ptr< B > PB;
  A( PB pb ) :
    m_pb( pb ),
    m_b( *pb )
  { }

  void someFunc()
  {
    // do something with m_b
  }

  PB getB()
  { 
    return m_pb; 
  }
  // in particular, no function returns a ref to B

private :
  PB m_pb;
  B &m_b;

};
B类;
甲级
{
公众:
typedef共享_ptrPB;
A(PB):
m_pb(pb),
m_b(*pb)
{ }
void someFunc()
{
//用m_b做点什么
}
PB getB()
{ 
返回m_pb;
}
//特别是,没有函数将ref返回给B
私人:
PB mu PB;
B&mèB;
};

我看不出任何问题,因为两个成员的作用域相同。但一般规则不建议使用引用或裸指针指向存储在共享_指针中的对象,因为该对象的生存期由共享指针管理,并且您很可能无法控制


注释中的注意事项KennyTM首先讲述了检查空指针。

如果您想避免间接寻址,那么使用引用而不是指针将不会有任何区别。我认为引用重定向等同于指针重定向,它比共享\u ptr重定向更快?