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

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

本文关键字:lock std guard 派生 为什么 unique      更新时间:2023-10-16

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不提供与unique_lock相同的功能(lock()/unlock()),因此它不能从中公开派生