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

标签 c++ c++11 language-design c++-standard-library

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

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

最佳答案

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

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

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

关于c++ - 为什么 std::unique_lock 不是从 std::lock_guard 派生的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177674/

相关文章:

c++ - MSB 到 LSB 交换后保留符号和小数

c++ - 如何使用 weak_ptr 构造一个包含对父对象的引用的对象?

c++ - 缺少 std::front 和 std::back

c++ - 带有 'using' 的可变参数模板和类型定义

c++ - 为什么这段代码用 gcc 编译而不用 clang

javascript - 为什么 JavaScript 字典键不能使用 myDict.123 语法以数字开头?

c++ - 如何在 Windows 中读取 CD 音频数据?

python - 为什么 Python 的标准库中没有排序容器?

数组作为单独的类型

c++ - 我如何知道内联函数是否在被调用的地方被实际替换?