在尝试研究我的问题时,我已经阅读了很多有关stack_overflow的有关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_ptr
以及make_shared
cannot detect继承,而该对象需要这种支持。不是因为继承了第三方类。
因此,要修复只作为公共(public)继承:
class A : public ThirdPartyClass, public std::enable_shared_from_this<A>