将对象传递给 lambda std::thread (C++) 中的函数:尝试使用已删除的函数
Passing object to a function in lambda std::thread (C++): attempt to use a deleted function
我正在尝试做这样的事情:
class A {
private:
std::mutex my_mutex;
public:
void A_function(){
some work with the mutex;
}
};
void B_function (A a){
a.A_function();
}
int main () {
A a;
std::thread t([&a]{
B_function(a); // error here
});
t.join();
}
但是,我得到这个错误:
error: attempt to use a deleted function « A »
error: attempt to use a deleted function « std::mutex::mutex(const std::mutex&) »
我做错了什么?
std::mutex
是不可复制的,因此,您自然不能复制 A
类型的对象,它具有 std::mutex
.
类型的子对象
作为变通方法,您可以通过引用而不是通过复制将参数传递给 B_function
:
void B_function (A& a)
{
a.A_function();
}
不知道使用原始对象而不是其副本是否适合您的需要。
我正在尝试做这样的事情:
class A {
private:
std::mutex my_mutex;
public:
void A_function(){
some work with the mutex;
}
};
void B_function (A a){
a.A_function();
}
int main () {
A a;
std::thread t([&a]{
B_function(a); // error here
});
t.join();
}
但是,我得到这个错误:
error: attempt to use a deleted function « A »
error: attempt to use a deleted function « std::mutex::mutex(const std::mutex&) »
我做错了什么?
std::mutex
是不可复制的,因此,您自然不能复制 A
类型的对象,它具有 std::mutex
.
作为变通方法,您可以通过引用而不是通过复制将参数传递给 B_function
:
void B_function (A& a)
{
a.A_function();
}
不知道使用原始对象而不是其副本是否适合您的需要。