为什么 std::unique_lock 不是源自 std::lock_guard

Why is std::unique_lock not derived from std::lock_guard

std::lock_guardstd::unique_lock 接口在它们的公共部分(构造函数和析构函数)中看起来非常相似。

为什么它们之间没有等级关系?

它们具有不可替代的语义:
lock_guard 保证在其整个生命周期内被锁定。
unique_lock 不保证,因此它不遵循 "IS A" 规则(unique_lock 不能是 lock_guard,因为它提供的保证较少)。

基于 lock_guard 实施 unique_lock 也并非易事(甚至可能是不可能的)。

显然反过来也是如此:虽然您可以根据 unique_lock(私有继承)实现 lock_guard,但 lock_guard 不提供相同的功能功能 (lock()/unlock()) 与 unique_lock 相同,因此不能公开派生自它。