首页  >  文章  >  后端开发  >  为什么 C 标准不包含非原子 `std::shared_ptr`?

为什么 C 标准不包含非原子 `std::shared_ptr`?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-30 02:03:28781浏览

Why Doesn't the C   Standard Include a Non-Atomic `std::shared_ptr`?

非原子智能指针:探索 C 标准中的缺失

在 C 内存管理领域,std::shared_ptr由于其原子操作,它是一种特殊的智能指针。这就提出了一个问题:为什么标准内存库中没有非原子对应项?

1。 std::shared_ptr 的非原子替代品

虽然 std::shared_ptr 提供原子行为,但某些场景可能不需要这样的开销。为了解决这个问题,出现了外部库,提供非原子引用计数智能指针。然而,标准内存库本身缺乏这样的功能。

2. C 11 中的缺席:原因和争论

尽管被认为有用,但在 C 11 标准化过程中,关于 std::shared_ptr 非原子版本的提议被拒绝了。有几个论点促成了这一决定:

  • 潜在的误用:非原子智能指针可能会无意中在多线程上下文中使用,从而导致难以调试的错误。
  • 一致性和互操作性:维护具有原子功能的单个“通用”shared_ptr,可以实现 C 库(包括第三方库)之间更顺畅的互操作性。
  • 性能注意事项: 虽然原子操作会产生性能成本,但它们的成本并不是过高,特别是在使用移动构造和移动分配时。
  • 自定义选项:如果程序员需要非原子行为,他们不会被阻止创建自己的自定义引用计数智能指针实现。

结论

中缺少非原子 std::shared_ptr C 标准是基于对潜在误用、一致性、性能和定制灵活性的担忧而深思熟虑的决定的结果。虽然外部库可以提供此类替代方案,但标准本身优先考虑了用于内存管理的通用原子智能指针的好处。

以上是为什么 C 标准不包含非原子 `std::shared_ptr`?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn