存在哪些 C 智能指针实现以及它们如何比较?
在 C 中,智能指针是一个包装类,它管理动态分配对象的生命周期,在不再需要时提供自动内存释放。智能指针有多种实现方式,每种都有自己的优点和缺点。
C 03 实现
-
std::auto_ptr: 有限的垃圾收集工具,拥有指向的对象,但不能在 STL 容器中复制或使用。它在 C 标准中已被弃用。
-
std::auto_ptr_ref: 与 std::auto_ptr 一起使用的设计细节,以允许在特定情况下进行复制和赋值。
C 11实现
-
std::unique_ptr: 替换 std::auto_ptr,对数组处理、左值保护和 STL 兼容性进行了重大改进。它授予指针的独占所有权。
-
std::shared_ptr: 将引用计数智能指针包装在动态分配的对象周围,从而允许共享所有权。它支持线程安全并处理不完整类型。
-
std::weak_ptr: 对带有 std::shared_ptr 的对象的非拥有引用。它不会阻止对象删除,但可以检索 std::shared_ptr(如果仍然有效)。它用于避免循环引用计数。
Boost 实现
-
boost::shared_ptr: 一个引用 -计数智能指针由于其广泛使用多功能性。
-
boost::weak_ptr: 对 boost::shared_ptr 的非拥有引用,类似于其 C 11 对应项。
-
boost:: scoped_ptr: 一个没有复制语义的轻量级智能指针,相当于std::unique_ptr.
-
boost::intrusive_ptr: 设计用于创建具有自定义引用计数和线程安全性的自定义智能指针兼容类。
-
boost:: shared_array: 数组的 boost::shared_ptr,提供数组操作功能,如operator[]和delete[].
-
boost::scoped_array: 用于数组的 boost::scoped_ptr,具有内置数组功能,但不可复制。
Qt 实现
-
QPointer: QObject 及其派生类的“弱”智能指针,在访问之前检查对象有效性,但在多线程环境中存在限制。
-
QSharedDataPointer: 一个“强”智能指针,需要引用计数实现,但不是atomic.
-
QExplicitlySharedDataPointer: 与 QSharedDataPointer 类似,但允许控制何时分离所指向的对象。
-
QSharedPointer: 原子引用- 具有线程安全、自定义删除和兼容性的计数智能指针boost::shared_ptr.
-
QWeakPointer: 对 QSharedPointer 的非拥有引用,类似于 std::weak_ptr.
-
QScopedPointer: 基于在 boost::scoped_ptr 上,提供单所有者智能指针以实现异常安全和兼容性。
以上是存在哪些 C 智能指针实现,它们有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!