只是一段模擬多個售票點同時賣票的演示程序,代碼如下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 關注
- 184 瀏覽
添加回答
舉報
0/150
提交
取消