Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在一起使用boost::bind、boost::shared_ptr和boost::thread时未调用复制构造函数_C++_Multithreading_Boost_Shared Ptr_Copy Constructor - Fatal编程技术网

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()) 
{}