提升互斥锁和类成员访问权限

时间:2013-04-28 13:01:32

标签: c++ multithreading boost mutex private-members

我在尝试使用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)

1 个答案:

答案 0 :(得分:2)

问题在于:

PointPorcessor processor = PointProcessor(x, y, z);

您正在通过复制初始化创建processor,其中首先默认构造PointProcessor类型的临时值,然后processor复制构造或从那个临时的移动构造。

但是,boost::mutex是不可复制的且不可移动的(在您使用的Boost版本中完全支持移动语义),这解释了为什么processor的复制初始化是非法的

您应该通过 direct-initialization 构建对象,这样:

PointProcessor processor(x, y, z);