【问题标题】: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)

【问题讨论】:

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


    【解决方案1】:

    问题出在这里:

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

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

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

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

    PointProcessor processor(x, y, z);
    

    【讨论】:

    • @Wajih:编辑了答案:)
    • @Wajih:当然,慢慢来,让我知道 :)
    • 老兄是男人 :) 我想我必须重新开始学习 C++!真的谢谢你!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2011-10-27
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多