A
classへのメンバーポインタを持つクラスがありますB
:
class A
{
public:
A()
{
m_b = createB();
}
std::shared<B> getSpB()
{
return m_b;
}
private:
std::shared<B> m_b;
};
class B
{
public:
B() {}
static std::shared_ptr<B> createB()
{
return std::make_shared<B>();
}
void func1() {/* ... */ }
private:
};
私のmain
関数では、shared_ptr
of クラスを作成し、A
両方のクラスのいくつかのメソッドを使用します。
int main()
{
auto spA = std::make_shared<B>();
auto spB = spA->getSpB();
spA.reset();
spB->func1();
}
ただし、 のメソッドを使用する前にB
、ポインターfunc1()
をリセットしたいと思います。spA
しかし、オブジェクトspA
が指しているが、まだ破棄することは許可されていません ( が指すオブジェクトはのメンバーのspB
一部に対する参照を保持できるため、設計要件)。A
それができるようにするために、B
へのポインターも保持できると思いました。しかし、はのコンストラクターから作成されるため、まだ初期化するオブジェクトはありません。A
A* m_A
B
A
A
m_A
のコンストラクターを に渡しthis
ても問題は解決しません。これは、 の最初の行で作成された と所有権を共有しないためです。A
createB(this)
spA
main()
spA
spA.reset()
私が持っていた別の選択肢は、を作成することでしm_A
たが、オブジェクトがまだ作成されていないため、のコンストラクターをに渡すshared_ptr
ことは不可能です。shared_from_this()
A
createB(this->shared_from_this())
A
この問題を解決する方法について何か提案はありますか?