[英]c++ mutex member of class causing compilation Error
當我向 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.....
}
我怎樣才能克服這個?
這是編譯錯誤,而不是內存錯誤。
請注意, std::mutex
不可復制。 因此,包含它的類也變得不可復制。
我猜(因為您沒有顯示相關代碼)您試圖復制myClass
的實例,這會導致上述編譯錯誤。
特別是,您可以在代碼中搜索按值傳遞或返回myClass
實例的位置。
更新:正如@NathanOliver 所指出的,上面代碼段中的這樣一個地方是:
thread(&myClass::Run, myClass(new_obj))
創建臨時myClass
位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.