首页 > 解决方案 > shared_ptr 的实际用途?

问题描述

对我来说,这shared_ptr似乎是一种懒惰的内存管理解决方案,而不是使用经过深思熟虑的零开销所有权系统unique_ptr来拥有指针,使用原始指针来观察指针以及std::move传递所有权。

我真正需要共享所有权的唯一地方是在多线程上下文中,但即使在这种情况下,我也不使用shared_ptr它,因为它不是线程安全的。

shared_ptr除了在开发中获得时间(这是一个正当的理由,但在编写高性能代码时不是)之外,我从未见过其他用途,这让我相信这shared_ptr是完全没用的。

有没有人见过shared_ptr真正需要引用计数的地方的实际用途?

编辑:在多线程环境中似乎有很多用途。在单线程上下文中呢?

标签: c++shared-ptrownershipreference-counting

解决方案


没有shared_ptr“必需”的用例,因为没有它,C++ 是图灵完备的。因此,任何用例shared_ptr都必须提高开发人员的效率。

您提到缺乏线程安全性,但提供的引用计数shared_ptr绝对是线程安全的。您可能会因为个人缺乏线程安全而感到困惑shared_ptr。但是如果两个线程shared_ptr对同一个对象有不同的 s,那么引用计数就没有线程安全问题。

因此,由于您似乎表明线程安全引用计数将是一个有用的东西(虽然不是必需的!),我认为这对您来说是最扣篮的用例。

除此之外,我要指出的是,与您可能在单线程上下文中执行的各种操作相比,多线程并没有什么特别之处。如果您可以有两个线程都关心 - 至少是暂时的 - 关于一个对象,并且谁都不想断言对其生命周期的完全控制,那么您可以在单个线程上有多个系统的等效情况。


推荐阅读