質問

次のコードを考えてみます。

using boost::shared_ptr;
struct B;
struct A{
    ~A() { std::cout << "~A" << std::endl; }
    shared_ptr<B> b;    
};
struct B {
    ~B() { std::cout << "~B" << std::endl; }
    shared_ptr<A> a;
};

int main() {
    shared_ptr<A> a (new A);
    shared_ptr<B> b (new B);
    a->b = b;
    b->a = a;

    return 0;
}

があるの出力はありませんの。 のんdesctructor が呼び出されません。メモリーリーク。 私はいつもスマートポインタは、メモリリークを回避するのに役立ちますと信じています。

私はクラスで相互参照が必要な場合は、

私は何をすべきでしょうか?

役に立ちましたか?

解決

あなたはこのような循環参照を持っている場合は、

、一つの目的は、<のhref =「http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/weak_ptr.htm」のrel =「noreferrer」を開催しなければなりません>他のではなく、weak_ptrshared_ptr でます。

shared_ptr導入するから:

  実装は参照カウントを使用するので、

shared_ptrインスタンスのサイクルは再生できません。 main()は、直接的または間接的にshared_ptrに戻すAを保持しているshared_ptrするAを、保持している場合たとえば、Aの使用回数は、1使用shared_ptrを「ブレークの使用回数にぶら下がっAを残す元weak_ptrの2破壊になりますサイクル。 "

のおかげで、グレン、リンクについて。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top