导致编译错误的类的c ++ mutex成员

时间:2018-04-20 14:05:20

标签: c++ multithreading c++11 memory mutex

当我向myClass添加互斥成员时,我不确定为什么会发生这种情况(在此示例中为mu):

Error   C2661   "'std::tuple<
void (__thiscall MyNameSpace::myClass::* )(void),MyNameSpace::myClass>::tuple': no overloaded function takes 2 arguments include\memory 2438
namespace MyNameSpace{
class myClass{
    shared_ptr<myClass2> property;
    mutex mu;

public:
    myClass(shared_ptr<myClass2> arg):property(std::move(arg)) {

    }
     void Run(){
         ...........
         }
}
class myClass2{
public:
    myClass2(std::string str) {
        trace(str);
    }

}
       }
int main(){
shared_ptr<myClass2> new_obj(new myClass2("somthing"));
    thread(&myClass::Run, myClass(new_obj)).join();
.......other stuff.....
}

我怎么能克服这个?

1 个答案:

答案 0 :(得分:2)

这是编译错误,而不是内存错误。

请注意,std::mutex不可复制。因此,包含它的类也变得不可复制。

猜测(因为您没有显示相关代码)您尝试复制myClass的实例,并导致上述编译错误。

特别是,您可以在代码中搜索位置,按值传递或返回myClass个实例。

更新:正如@NathanOliver所指出的,上述代码段中的这样一个地方是:

thread(&myClass::Run, myClass(new_obj))

创建临时myClass