在我的代碼中,我使用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