コードで shared_ptr と weak_ptr を使用する方法を見つけようとしています。クラス 1 とクラス 2 の 2 つのクラスがあります。One の内部クラスの 2 つ。クラス 2 のコンストラクターは、以下に示すようにクラス 1 の weak_ptr を受け取り、後で使用できるように格納します。
Class One
{
Class Two
{
private:
std::weak_ptr<One> m_wptrOne;
public:
Two(std::weak_ptr<One> wptrOne)
{
m_wptrOne = wptrOne;
/* m_wptr is used later by class Two if not expired and valid ofcourse */
}
}; // End Class Two
.....
void foo()
{
std::shared_ptr sptrOne(this);
Two obj(sptrOne);
.... /* do my work */
} // Program crashes when foo terminates
}; //End Class One
関数 foo が返されるとクラッシュします。これは、「sptr」が「this」ポインターを唯一の所有者であると考えて解放しようとしていると思われるためです。
どうすればこの問題を解決できますか? または、私のプログラムは構造的に間違っていますか? どんな提案でも大歓迎です。
ありがとう、
トゥシャール