当我尝试将从回调接口(interface)继承的派生类中的shared_from_this()传递到在构造函数中采用回调基类shared_ptr的第三个类时,我遇到了错误的weak_ptr异常。为什么这不起作用?请参阅下面的简化测试用例:
#include <boost/tr1/memory.hpp>
class MyCallbacks : public std::tr1::enable_shared_from_this<MyCallbacks>
{
public:
virtual ~MyCallbacks() {}
virtual void callback1() = 0;
};
class Worker
{
public:
Worker(std::tr1::shared_ptr<MyCallbacks> cb) : callbacks(cb) {}
void do_work() { if (callbacks) callbacks->callback1(); }
private:
std::tr1::shared_ptr<MyCallbacks> callbacks;
};
class Boss : public MyCallbacks
{
public:
Boss() : worker(shared_from_this()) {}
void go()
{
std::cerr << "Calling worker->do_work" << std::endl;
worker.do_work();
}
void callback1()
{
std::cerr << "callback1" << std::endl;
}
private:
Worker worker;
};
int main (int argc, char const *argv[])
{
std::tr1::shared_ptr<Boss> boss(new Boss);
boss->go();
return 0;
}
最佳答案
无法在构造函数中调用shared_from_this(),因为首先必须存在至少一个shared_ptr see the Requires statement at the bottom of this page
关于c++ - 为什么我不能将shared_from_this 与回调接口(interface)对象一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528841/