我在尝试使用 BOOST threads 1.53.0 时遇到了问题.由于我是 BOOST 的新手,我现在遇到一个问题,即项目中的大型类需要进行一些线程模式处理。
在编译代码时,我不断收到错误:
error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex'
通过网上的阅读我发现使用Boost的lock_guard,结果如下所示
PointPorcessor processor = PointProcessor(x,y,z);
正在创建类的实例并将其分配给 processor
变量。 (或者我错了吗?)。这基本上意味着 boost 现在将允许复制互斥体
类本身
PointProcessor
{
boost::mutex mtex; // The one and only mutex
// Other members
};
我可以使用指针来代替
PointProcessor* 处理器 = new PointProcessor(x,y,z)
问题是,这是一个大型代码库,我不想将其余实现更改为 PointProcessor* processor = new PointProcessor
,因为它们只是 PointProcessor processor = PointProcessor(x, y,z)
最佳答案
问题在于:
PointPorcessor processor = PointProcessor(x, y, z);
您正在通过复制初始化创建processor
,其中类型PointProcessor
的临时值首先被默认构造,然后是 processor
是从该临时文件复制构造或移动构造的。
但是,boost::mutex
是不可复制和不可移动的(前提是您使用的 Boost 版本完全支持移动语义),这解释了为什么复制初始化 processor
是非法的。
您应该通过直接初始化构造您的对象,这样:
PointProcessor processor(x, y, z);
关于c++ - boost 互斥量和类成员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16263144/