shared_ptr
とをweak_ptr
一緒に使用するのに問題がありenable_shared_from_this
ます。
私が見ている症状をグーグルで検索すると、誰もが「オブジェクトを所有するインスタンスshared_from_this()
がない場合は使用できません。shared_ptr
しかし、それは私の場合ではありません。
次のコードを検討してください。
#include <memory>
#include <cassert>
class MyClass : std::enable_shared_from_this<MyClass>
{
public:
void this_fails()
{
// Doesn't even assert(), because it throws bad_weak_ptr
assert(shared_from_this());
}
void this_fails_too()
{
std::weak_ptr<MyClass> weak = weak_from_this();
std::shared_ptr<MyClass> strong = weak.lock();
// This assert fails
assert(strong.get());
}
};
int main()
{
std::shared_ptr<MyClass> obj = std::make_shared<MyClass>();
obj->this_fails();
obj->this_fails_too();
}
どちらの方法でMyClass
もプログラムがクラッシュします。明らかな何かが欠けているに違いありません - それは何ですか?