提高互斥量和类成员访问
Posted
技术标签:
【中文标题】提高互斥量和类成员访问【英文标题】:Boost mutex and class member access 【发布时间】:2013-04-28 13:01:32 【问题描述】:我在尝试使用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* 处理器 = 新 PointProcessor(x,y,z)
问题是,这是一个大型代码库,我不想将其余的实现更改为 PointProcessor* processor = new PointProcessor
,因为它们只是 PointProcessor processor = PointProcessor(x,y,z)
【问题讨论】:
【参考方案1】:问题出在这里:
PointPorcessor processor = PointProcessor(x, y, z);
您正在通过复制初始化创建processor
,其中PointProcessor
类型的临时对象首先被默认构造,然后processor
被复制构造或移动构造暂时的。
但是,boost::mutex
是不可复制和不可移动的(前提是您使用的 Boost 版本完全支持移动语义),这就解释了为什么 processor
的复制初始化是非法的。
你应该通过直接初始化来构造你的对象,这样:
PointProcessor processor(x, y, z);
【讨论】:
@Wajih:编辑了答案:) @Wajih:当然,慢慢来,让我知道 :) 老兄是男人 :) 我想我必须重新开始学习 C++!真的谢谢你!以上是关于提高互斥量和类成员访问的主要内容,如果未能解决你的问题,请参考以下文章
在Java和c#中如果不写访问修饰符,类和类成员默认的是啥访问修饰符?