使用boost :: mutex - 隐式删除错误(因为默认定义不正确)

时间:2014-04-28 19:24:03

标签: c++ boost

我在.h文件(标题)

中有类以下内容
#include <boost/thread.hpp>

class MyClass{

    private:
        boost::mutex bPoolMtx_;

        // ... other vars
    public:
        // public vars and methods

}

尝试构建/编译时出现以下错误。

MyClass.h:38:7: note: ‘MyClass::MyClass(const MyClass&)’ is implicitly deleted because the default definition would be ill-formed:
MyClass.h:38:7: error: use of deleted function ‘boost::mutex::mutex(const boost::mutex&)’

我还没有在cpp文件中使用互斥锁。当我注释掉boost::mutex行时,它构建得很好。发生了什么事?

1 个答案:

答案 0 :(得分:5)

编译器生成的默认复制构造函数默认复制所有数据成员。您对boost::mutex的使用会引发错误,因为互斥锁不可复制。

您可以编写自己的复制构造函数,不会尝试复制互斥锁,也可以只删除MyClass的复制构造函数。

#include <boost/thread.hpp>

class MyClass{
    private:
        boost::mutex bPoolMtx_;

        // ... other vars
    public:
        // public vars and methods
        MyClass(const MyClass&) = delete;
}