gpt4 book ai didi

c++ - 从第三方定义的类继承时的 shared_from_this

转载 作者:行者123 更新时间:2023-12-02 10:15:30 26 4
gpt4 key购买 nike

在尝试研究我的问题时,我已经阅读了许多有关 shared_from_this、bad_weak_ptr 异常和多重继承的堆栈溢出文章。他们都建议您从 enable_shared_from_this 继承一个基类,然后从中派生。好吧,当您必须从中派生的类是来自您无法编辑的第三方库时,该怎么办?

例子:

#include <iostream>
#include <memory>

class ThirdPartyClass
{
public:
ThirdPartyClass() {}
ThirdPartyClass(const ThirdPartyClass &) = delete;
virtual ~ThirdPartyClass() {};
};

class A : public ThirdPartyClass, std::enable_shared_from_this<A>
{
public:
A():ThirdPartyClass(){}
virtual ~A(){}

void Foo();
};

void DoStuff(std::shared_ptr<A> ptr)
{
std::cout << "Good job if you made it this far!" << std::endl;
}

void A::Foo()
{
DoStuff(shared_from_this()); // throws here
}

int main() {
std::shared_ptr<A> a = std::make_shared<A>();
a->Foo();
return 0;
}

最佳答案

您收到错误是因为您不是从 enable_shared_from_this 公开继承的。和 shared_ptrmake_shared cannot detect该对象需要这样的支持。不是因为从第三方类继承。

所以,修复只是继承为公共(public):

class A : public ThirdPartyClass, public std::enable_shared_from_this<A>

关于c++ - 从第三方定义的类继承时的 shared_from_this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62131475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com