只是一段模拟多个售票点同时卖票的演示程序,代码如下class TicketShop{char name;static int remains;mutex myMutex;public:TicketShop(char n){ name = n; }void sell();};int TicketShop::remains = 100;void TicketShop::sell(){while (1){myMutex.lock();if (remains > 0){remains--;cout << remains << "\t" << name << endl; }else{myMutex.unlock();break;}myMutex.unlock();}}结果编译时报错,说error C2280: 'std::mutex::mutex(const std::mutex &)' : attempting to reference a deleted function发现如果把第五行mutex myMutex 的生命移到类外,即改成全局变量,就没有这个问题。
2 回答

largeQ
TA贡献2039条经验 获得超8个赞
是你构造TicketShop对象的地方,可能是你的主函数里,你没贴出来,可能是写了类似:
TicketShop s1; TicketShop s2 = s1; |
这样的代码,而你的TicketShop类使用默认的拷贝构造函数,导致上面代码第二句构造s2时会调用mutex的拷贝构造函数,而mutex的拷贝构造函数是=delete的,也就是不允许拷贝构造,所以编译报错
当你改成全局的mutex声明时,拷贝构造TicketShop对象不会引发mutex对象的拷贝构造,所以就没问题。
- 2 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消