concurrency::critical_section
既不可复制也不可移动(这是以老式的复制构造函数的方式完成的private
,因此会出现错误)。因此,Class1
正如所写的那样,也不能复制或移动,也不能将push_back
其放入向量中。
要解决此问题,您可以编写自己的复制构造函数和仅复制的复制赋值运算符f1
:
class Class1
{
public:
concurrency::critical_section _cs;
int f1;
Class1(int f) : f1(f) { }
Class1(const Class1 &other) : f1(other.f1) { }
Class1 & operator=(const Class1 &other) {
// synchronization omitted
f1 = other.f1;
}
};
旁注:Class2 c2();
声明返回 a 的函数Class2
,而不是值初始化的对象。
旁注2:VS的“错误列表”中的错误消息通常不完整。您需要检查构建输出以获取完整的错误日志。在这种情况下,我的 VS2013 上的完整错误日志是:
ConsoleApplication2.cpp(15): error C2248: 'Concurrency::critical_section::critical_section' : cannot access private member declared in class 'Concurrency::critical_section'
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\concrt.h(3712) : see declaration of 'Concurrency::critical_section::critical_section'
D:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\concrt.h(3549) : see declaration of 'Concurrency::critical_section'
This diagnostic occurred in the compiler generated function 'Class1::Class1(const Class1 &)'