32

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もプログラムがクラッシュします。明らかな何かが欠けているに違いありません - それは何ですか?

4

2 に答える 2