为什么std :: unique_lock不是从std :: lock_guard派生的

Pao*_*o M 3 c++ language-design c++-standard-library c++11

std::lock_guardstd::unique_lock接口看起来非常相似,它们的共同部分(构造函数和析构函数).

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

Mik*_*eMB 8

它们具有不可替代的语义:
lock_guard保证在其所有生命周期中都被锁定.
unique_lock并不保证所以它不遵循"IS A"规则(unique_lock不能是a lock_guard,因为它提供的保证较少).

同时实现unique_lock基于lock_guard不会是微不足道的(甚至不可能)因为这个原因.

显然也是如此倒过来:虽然可以实现lock_guard在一个方面unique_lock(私有继承),lock_guard不提供相同的功能(lock()/unlock())的unique_lock,因此不能公开从它派生.