2012-02-29 222 views
0

我存储共享ptr和对包装内的共享对象的引用。有没有人看到内存泄漏的机会?只是谨慎...避免shared_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; 

}; 
+3

如果'pb'为空怎么办? – kennytm 2012-02-29 16:03:23

+0

如果你想避免间接寻址,那么使用引用而不是指针将不会有任何区别。 – 2012-02-29 16:23:32

+0

我认为引用重定向等于指针重定向,它比shared_ptr重定向更快? – 2012-03-01 06:35:49

回答

2

我没有看到任何问题,只要两个成员有相同的范围。但是,一般的规则并不建议使用存储在shared_pointer中的对象的引用或裸指针,只要对象的生命周期由共享指针管理,并且您很难有机会让事情脱离您的控制。

P.S.在评论KennyTM讲述有关首先检查空指针。