C ++如何初始化包含互斥锁的class的静态变量
C++ How to initialize static variable of an class which contains a mutex
我有一个带互斥量的模板化 class:
template <typename T> class A {
public:
std::mutex classMutex;
T value;
A(T initValue) : value(initValue){}
};
和第二个 class 与第一个 class:
的静态成员
class B{
static A<double> test;
};
A<double> B::test = 0.0;
我一直收到错误消息:
"copying variable of type 'A' invokes deleted constructor"
感谢@rafix07:
解决方法是:
A<double> B::test{0.0};
"mutex 既不可复制也不可移动,这意味着默认删除所有复制和移动操作(对于包含 mutex 作为数据变量的 class)
A(const A&) = delete,
A(A&&) = delete
等当你打电话给
A<double> B::test = 0.0
double 值 0.0 转换为
A<double>(0.0)
所以你有
A<double> B::test = A<double>(0.0)
因为复制构造被删除编译器拒绝这一行。使用 {},您只需调用 A(0.0) 构造函数,而无需任何复制语法。”@rafix07
我有一个带互斥量的模板化 class:
template <typename T> class A {
public:
std::mutex classMutex;
T value;
A(T initValue) : value(initValue){}
};
和第二个 class 与第一个 class:
的静态成员class B{
static A<double> test;
};
A<double> B::test = 0.0;
我一直收到错误消息: "copying variable of type 'A' invokes deleted constructor"
感谢@rafix07:
解决方法是:
A<double> B::test{0.0};
"mutex 既不可复制也不可移动,这意味着默认删除所有复制和移动操作(对于包含 mutex 作为数据变量的 class)
A(const A&) = delete,
A(A&&) = delete
等当你打电话给
A<double> B::test = 0.0
double 值 0.0 转换为
A<double>(0.0)
所以你有
A<double> B::test = A<double>(0.0)
因为复制构造被删除编译器拒绝这一行。使用 {},您只需调用 A(0.0) 构造函数,而无需任何复制语法。”@rafix07