你先想写类别的目的是什么? 是提供抽象化. 而 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++ 干嘛呢