1

我在尝试使用BOOST 线程 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* processor = new PointProcessor(x,y,z) 问题是,这是一个很大的代码库,我不想将其余的实现更改PointProcessor* processor = new PointProcessor为它们只是PointProcessor processor = PointProcessor(x,y,z)

4

1 回答 1

2

问题在于:

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

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

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

你应该通过直接初始化来构造你的对象,这样:

PointProcessor processor(x, y, z);
于 2013-04-28T13:08:15.417 回答