Using boost::mutex - implicitly deleted error (bec

2019-06-03 00:46发布

问题:

I have class looks as follows in .h file (Header)

#include <boost/thread.hpp>

class MyClass{

    private:
        boost::mutex bPoolMtx_;

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

}

I get the following error trying to build/ compile.

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&)’

I don't use the mutex at all in the cpp file yet. When I comment out the boost::mutex line it builds fine. What is going on?

回答1:

The default copy constructor generated by the compiler copies all data members by default. Your use of boost::mutex throws an error because the mutex isn't copyable.

You can write your own copy constructor that doesn't attempt to copy the mutex or simply delete the copy constructor for MyClass.

#include <boost/thread.hpp>

class MyClass{
    private:
        boost::mutex bPoolMtx_;

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


标签: c++ boost