クラスAとクラスBをクラスAの各インスタンスはクラスBの0〜N個のインスタンスから所有します。Aのインスタンスが削除されると、Bのインスタンスも削除されます。例えば別のスマートポインタを持たないweak_ptrの作成
は:shared_ptr<parent>
を有する
class parent
{
private:
vector< unique_ptr<child> > m_children;
public:
weak_ptr<child> create_child()
{
m_children.push_back(move(make_unique<child>(???)));
return m_children.back();
}
};
class child
{
private:
weak_ptr<parent> m_parent;
public:
child(weak_ptr<parent> parent) : m_parent(parent) { }
};
一つは、可能性は、手動でそのポインタを使用してchild
を作成しました。しかし、クラスparent
の範囲内では、であり、shared_ptr
〜this
ではないため、parent
インスタンスが格納されていることがわからないため、このshared_ptr
のうちweak_ptr
を作成することはできません。持っている。
私の質問は:child
クラススコープ内で、parent
インスタンスが使用前に解放されていないことを確認するにはどうすればよいですか? child
を作成するときに「安全な」ポインタを返すにはどうすればよいですか?ありがとうございました。
あなたは 'shared_ptr'から' unique_ptr'から 'weak_ptr'を得ることはできません。 –
あなたはおそらく['std :: enable_shared_from_this'](http://en.cppreference.com/w/cpp/memory/enable_shared_from_this)を探しています。 – Quentin
@Quentinそれは私が必要としているようですが、私が読んだことによると、親はshared_ptrに格納する必要があります。クラスのユーザーは、文書に記載されていてもそれを忘れるかもしれません。なぜなら、それに対して強力な保護がないからです。私が理解していないことがない限り、私には少し安全ではないようです。 – Virus721