使用删除的函数'std :: thread :: thread(const std :: thread&)'

Zixuan Zhang

我有类eventEngine和网关,如下所示:

class eventEngine
{
public:
    eventEngine(); 

    std::thread threa;
    std::thread timer;  
};

class Gateway 
{
protected:
    eventEngine ee;
    std::string gatewayName;
};

网关的构造函数:

Gateway::Gateway(eventEngine ee, std::string gatewayName)
{ 

this->ee.threa = std::move(ee.threa);
this->ee.timer = std::move(ee.timer);

this->gatewayName = gatewayName;
}

和main1.cpp:

int main()
{
    eventEngine e;
    std::string names = "abc";
    Gateway g(e,names);

    return 0;
}

当我尝试在main1.cpp中进行编译时,出现错误:

main1.cpp:12:21: error: use of deleted function 'eventEngine::eventEngine(const eventEngine&)'
  Gateway g(e,names);
                     ^
In file included from Gateway.h:11:0,
                 from main1.cpp:2:
eventEngine.h:25:7: note: 'eventEngine::eventEngine(const eventEngine&)' is implicitly deleted because the default definition would be ill-formed:
 class eventEngine
       ^
eventEngine.h:25:7: error: use of deleted function 'std::thread::thread(const std::thread&)'
In file included from Gateway.h:8:0,
                 from main1.cpp:2:
/usr/lib/gcc/x86_64-pc-cygwin/5.3.0/include/c++/thread:126:5: note: declared here
     thread(const thread&) = delete;
     ^
In file included from Gateway.h:11:0,
                 from main1.cpp:2:
eventEngine.h:25:7: error: use of deleted function 'std::thread::thread(const std::thread&)'
 class eventEngine

我已经搜索了类似的问题,似乎std :: thread有问题,线程是非复制类,我已更改为std :: move,如本-> ee.threa = std :: move(ee.threa ); this-> ee.timer = std :: move(ee.timer); 但它仍然给我错误,这是什么问题?

int3

要使此工作有效,您应该更改代码:

Gateway::Gateway(eventEngine&& ee, std::string&& gatewayName)
{
    this->ee = std::move(ee);    
    this->gatewayName = std::move(gatewayName);
}

Gateway g(std::move(e), std::move(names));

或简单地

Gateway g(eventEngine{}, "abc");

但是最好的方法是以标准形式编写:

Gateway::Gateway(eventEngine&& ee, std::string&& gatewayName) : ee{std::move(ee)}, gatewayName{std::move(gatewayName)} {}

您的代码无效,因为您尝试使用copy-ctor初始化函数参数,由于复制了std::thread的和分别eventEnginecopy-ctors,该参数被删除了您应该使用移动螺丝代替它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章