我在尝试使用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
变量。 (或者我错了?)。这基本上意味着提升将允许复制互斥锁
班级本身
PointProcessor
{
boost::mutex mtex; // The one and only mutex
// Other members
};
我可以使用指针代替
PointProcessor * processor =新的PointProcessor(x,y,z)
问题是,这是一个很大的代码库,我不想将其余的实现更改为PointProcessor* processor = new PointProcessor
,因为它们只是PointProcessor processor = PointProcessor(x,y,z)
答案 0 :(得分:2)
问题在于:
PointPorcessor processor = PointProcessor(x, y, z);
您正在通过复制初始化创建processor
,其中首先默认构造PointProcessor
类型的临时值,然后processor
复制构造或从那个临时的移动构造。
但是,boost::mutex
是不可复制的且不可移动的(在您使用的Boost版本中完全支持移动语义),这解释了为什么processor
的复制初始化是非法的
您应该通过 direct-initialization 构建对象,这样:
PointProcessor processor(x, y, z);