繁体   English   中英

错误:使用已删除的函数boost :: shared_mutex :: shared_mutex

[英]error: use of deleted function boost::shared_mutex::shared_mutex

这真的很奇怪。 首先,我不知道您可以删除函数,其次,这是在外部库中发生的。

错误的情况是我正在使用QtCreator来构建项目并一起进行增强,而没有任何静态库。

使用的编译器是gcc

myprogram.h:4:7: error: use of deleted function 'boost::shared_mutex::shared_mutex(const boost::shared_mutex&)'
In file included from ../libs/boost155/boost/thread/lock_guard.hpp:11:0,
                 from ../libs/boost155/boost/thread/pthread/thread_data.hpp:11,
                 from ../libs/boost155/boost/thread/thread_only.hpp:17,
                 from ../libs/boost155/boost/thread/thread.hpp:12,
                 from ../libs/boost155/boost/thread.hpp:13,
                 from myprogram.h:2,
                 from myprogram.cpp:1:

您正在尝试复制互斥锁。 这是不可能的。

您是通过以下方式触发的

 from myprogram.h:2,
 from myprogram.cpp:1:

因此,这就是您的代码 可能的是,如果您的代码中没有明确指出它,则您将shared_mutex作为类的成员,并且该类将被复制,成为代码其余部分的一部分。

例如:

struct MyClass {
    boost::shared_mutex sm;
};

std::vector<MyClass> v;
// etc.

vector将在许多操作中复制并移动其元素,这将触发互斥体复制。

对于背景:

首先,我不知道您可以删除函数

C ++ 11允许:

struct noncopyable
{
  noncopyable(const noncopyable&) =delete;
  noncopyable& operator=(const noncopyable&) =delete;
};

另一个类似的功能是标记为默认( =default )的函数。 关于MSDN的关于已删除和默认功能的好文章: 单击

其次,这发生在外部库中。

您尝试从该库复制shared_mutex这是不可能的。 考虑一下-“互斥复制”代表什么?

可能您有一些代码引入了复制-您是否将一些包含互斥对象的对象存储在std::容器中?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM