shared_from_this with derived class

shared_from_this with derived class

本文关键字:derived class with this from shared      更新时间:2023-10-16

我正在尝试使用shared_from_this函数为此创建共享 ptr。

#include <iostream>
#include <memory>
class foo {
public:
    virtual void method() {
        std::cerr << "foo::method()" << std::endl;
    }
};
class foo_derived : public foo, public std::enable_shared_from_this<foo> {
public:
    void method() override {
        auto self(shared_from_this());
        std::cerr << "foo_derived::method" << std::endl;
    }
};
int main() {
    foo_derived().method();
}

此代码从第 auto self(shared_from_this()); 行引发bad_weak_ptr我认为问题在于自我是在派生类中创建的。我正在寻找这种行为的解释,并且还希望获得派生类的有效shared_from_this用法示例。

它与继承无关。以这种方式调用method将起作用:std::make_shared<foo_derived>()->method();

CPP首选项标准::enable_shared_from_this::shared_from_this

只允许在以前共享的shared_from_this上调用 对象,即在由 std::shared_ptr 管理的对象上。否则 行为未定义(直到 C++17(std::bad_weak_ptr 被抛出(由 从默认构造的构造weak_this shared_ptr构造函数((因为 C++17(.