在我的代码中,我使用boost::threads
,我有一个类通过一个称为fnThread()
的成员函数运行线程。在这个fnThread()中我想创建一个shared_from_this()并将它传递给有信号的收听方。但行boost::shared_ptr<foo> p = shared_from_this()
抛出一个异常如下;shared_from_this()从另一个线程(一个成员线程函数)
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr> > at memory location 0x04c2f720.
有问题的命令是shared_from_this()。从另一个线索创建shared_from_this()
是否违法或我做错了什么?任何帮助表示赞赏。谢谢 ! PS:我计划改变我的信号参数为普通指针,因为它不会影响我的结构。但我赞成shared_ptr <>,我想听取有关该决定的任何意见。也许这对于这种特殊情况是一个不好的选择。你有什么建议?
编辑:
下面是一个简单的类,以测试
class foo : public boost::enable_shared_from_this<foo>
{
public:
int start()
{
foo_thread.reset(new boost::thread(boost::bind(&foo::fn_foo_thread, this)));
return 0;
}
~foo()
{
if (foo_thread->joinable())
foo_thread->join();
}
private:
boost::scoped_ptr<boost::thread> foo_thread;
void fn_foo_thread()
{
boost::shared_ptr<foo> p = shared_from_this();
std::cout << "foo thread terminated. \n" << std::endl;
}
};
你是什么意思,“创建'shared_from_this()'?” –
我的意思是将'boost :: shared_ptr'改为'this' –
fgungor
请向我们展示实例化'foo'并调用'start'的代码。错误可能在那里。 – Macke