2012-02-29 74 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講述有關首先檢查空指針。