我想通过对象引用传递函数的参数。如果我写这样的代码:
#include <boost\thread\thread.hpp>
class Data
{
public:
Data();
~Data();
void func(boost::mutex &mut);
private:
boost::condition_variable condData;
boost::mutex mutData;
};
void Data::func(boost::mutex &mut)
{
Data* data = this;
data->mutData = mut;// Here a syntax error
}
此处data->mutData = mut;
显示错误
Error: "boost::mutex &boost::mutex:.Operator=(boost::mutex &)" can not be accessed
等号。
如何解决这个问题?
答案 0 :(得分:3)
按照设计,无法复制或分配互斥锁。
允许这会使使用互斥锁来保护某些资源的想法无效。如果每个人都拥有自己的互斥锁副本,则共享资源不再存在单一锁定。
答案 1 :(得分:0)
boost::mutex
继承自boost::noncopyable
,无法复制或分配。 (您发布的错误消息表明赋值运算符是私有的。因此您不能使用它。)如果要共享boost::mutex
对象,则必须使用指针或全局变量。