我使用boost::bind
創建新的boost::thread
,並將其存儲在boost::shared_ptr
中。
我正在向boost::thread
傳遞一個函數和參數,但是當線程啓動時,它沒有正確地調用函數參數的拷貝構造函數。將boost :: bind,boost :: shared_ptr和boost :: thread一起使用時未複製的構造函數
我使用的線程的創建方法是一種很常見的升壓模式,所以我不認爲這是問題的所在:
void myclass::myfunc() {
Workflow wfOriginal;
boost::shared_ptr<boost::thread>(
new boost::thread(boost::bind(&myclass::anotherfunc, this, wfOriginal)));
}
// ...
void myclass::anotherfunc(Workflow wfCopied) {
// Doing something
}
我想給Workflow
從myfunc()
複製到anotherfunc()
。
Workflow
包含一個集合,所以我提供了一個複製構造函數,將現有集合中的元素複製到新的Workflow
。
不幸的是,當新線程調用anotherfunc()
時,wfCopied
內部的集合爲空!
我可以告訴Workflow
對象被部分複製,因爲像字符串和整數等其他成員已被複制,但集合中的元素沒有。
我已驗證了拷貝構造函數通過使用此代碼測試是否能夠正常工作:
Workflow wf;
// ... insert some elements into wf...
Workflow wf1 = wf;
// wf1 has the same elements
我想強調的是,我的測試表明我Workflow
的拷貝構造函數工作正常。
但爲了完整起見,這裏是Workflow
拷貝構造函數:
Workflow::Workflow(const Workflow& workflow) {
this->_id = workflow._id;
(this->_tasks).clear();
Workflow::TaskCollectionConstIterator it;
for (it = (this->_tasks).begin(); it < (this->_tasks).end(); it++)
(this->_tasks).push_back(*it);
}
誰能幫助我?
這是你的真實密碼?使用`wf`作爲`myclass :: anotherFunc`上的參數名和作爲類成員似乎是可疑的。 – 2010-12-05 22:02:08