2012-02-29 14 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'がnullの場合はどうなりますか? – kennytm

+0

間接参照を避けたい場合は、ポインタの代わりに参照を使用しても違いはありません。 –

+0

私はリファレンスリダイレクトがshared_ptrリダイレクションより速いポインタリダイレクションと等しいと思いましたか? –

答えて

2

を慎重います。しかし、一般的なルールは、オブジェクトの寿命が共有ポインタによって管理されている限り、shared_pointerに格納されているオブジェクトへの参照または裸のポインタを使用することお勧めしません、あなたはあなたのコントロールの外に物事を得るために悪いチャンスを持っています。

P.S. KennyTMのコメントでは、まずNULLポインタのチェックについて説明します。

関連する問題