你先想寫類別的目的是什麼? 是提供抽象化. 而 mutex目的就是要確保抽象化有被達成, 具體來說就是物件的狀態改變不會有意外發生. 你為了 mutex 反而增加和類別責任無關的方法, 你同事都不會覺得奇怪嗎? 一般有mutex 也會經過封裝, 讓使用者傳入 callback 來間接存取物件, 實作可以參考 boost::with_lock_guard(),多做一層封裝在之後確定存取都在同一個 thread 之後也可以直接把 mutex 拿掉, client code 不需要做調整所以你會看到有些函式庫進 critical section 是給callback 而不是明確地寫 lock 敘述
https://wandbox.org/permlink/zLuj9ynXtafalAYi當你在傳東西給 callback 的時候, 最好是用限縮後的介面, 看是要用 std::forward_as_tuple() 或是允取存取的成員放在 base class 內, 再怎麼樣都不會搞到把所有成員都變成 public, 那這樣你還寫 C++ 幹嘛呢