起因是把之前寫的類中的 mutex 使用了(之前注釋掉了沒用到這個變量);
或者說添加了一個 mutex 變量, 然后 這個類有嵌套在了 其類的 map 中使用, 然后 編譯 就報錯
`
C2280 XXX:XXX(const XXX &) 嘗試引用已刪除的函數
C2280 XXX::operator=(const XXX &) 嘗試引用已刪除的函數
`
手動添加 這倆函數, 依然包錯
死活折騰不起作用, 在網上搜的, 說什么 const 變量啦,析構函數啦.... 等等都無效
后來, 折騰的沒辦法, 重新 check 上個版本的 工程( 嗯, 幸好有svn )
然后 一點一點 添加變化, 添加一點 編譯一次,添加一點 編譯一次
終於發現, TMD 是添加 了 mutex 變量后 就報錯的
然后網上 搜了下, 直接給了解釋:
`
由於std::mutex的拷貝構造函數被禁了:
mutex( const mutex& ) = delete;
`
麻蛋!~
而 std::vector 和 std::map 都是要求 類型 必須包含拷貝構造函數的,所以就報錯了。
且 即時 添加 mutable 關鍵字,也無效的.
最簡單的方法就是 :
把 std::mutex _mutex ;改成 std::shared_ptr<std::mutex> _mutex 就可以了
使用的時候
std::lock_guard<std::mutex> _lock{ *_mutex }; // `*`解釋得到
或者自己手動 這兩個函數吧....
看情況, 如果擔心 多線程 是什么莫名其妙的鎖了, 就手動 咯, 雖然說寫的