C++ 在一起使用boost::bind、boost::shared_ptr和boost::thread时未调用复制构造函数
我正在使用C++ 在一起使用boost::bind、boost::shared_ptr和boost::thread时未调用复制构造函数,c++,multithreading,boost,shared-ptr,copy-constructor,C++,Multithreading,Boost,Shared Ptr,Copy Constructor,我正在使用boost::bind创建一个新的boost::thread,并将其存储在boost::shared\u ptr中 我正在将函数和参数传递给boost::thread,但是当线程启动时,它没有正确地调用函数参数的复制构造函数 我使用的线程创建方法是一种非常常见的Boost模式,因此我认为这不是问题所在: void myclass::myfunc() { Workflow wfOriginal; boost::shared_ptr<boost::thread>(
boost::bind
创建一个新的boost::thread
,并将其存储在boost::shared\u ptr
中我正在将函数和参数传递给
boost::thread
,但是当线程启动时,它没有正确地调用函数参数的复制构造函数
我使用的线程创建方法是一种非常常见的Boost模式,因此我认为这不是问题所在:
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::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);
}
工作流::工作流(const工作流和工作流){
此->\u id=工作流。\u id;
(此->_任务)。清除();
工作流::TaskCollectionConterator it;
for(it=(this->u tasks.begin();it<(this->u tasks.end();it++)
(此->\u任务)。向后推(*it);
}
有人能帮我吗?看来你的复制构造函数有缺陷。您正在从空向量复制到向量。这导致没有任何内容被复制 我想你的意思是:
for (it = (workflow->_tasks).begin(); it < (workflow->_tasks).end(); it++)
(this->_tasks).push_back(*it);
for(it=(工作流->\u任务)。begin();it<(工作流->\u任务)。end();it++)
(此->\u任务)。向后推(*it);
您知道什么是构造函数初始化列表吗?为什么要清除构造函数中的容器
Workflow::Workflow(const Workflow& workflow): _id(workflow._id),
_tasks(workflow._tasks.begin(), workflow._tasks.end())
{}
这是你真正的密码吗?使用
wf
作为myclass::anotherFunc
上的参数名和类成员似乎是可疑的。好吧,问题是另一个,:)无论如何,这也是一个bug!!谢谢你的帮助。。。多么愚蠢的虫子。。。。我真的犯了这样一个愚蠢的错误吗?我刚刚编译了一些测试代码,从概念上来说,它可以实现您正在尝试的功能。我得到了预期的结果。也许您的代码片段中还遗漏了一些其他内容。
Workflow::Workflow(const Workflow& workflow): _id(workflow._id),
_tasks(workflow._tasks.begin(), workflow._tasks.end())
{}