std::shared_ptr保证是线程安全的。我不知道典型的实现使用什么机制来确保这一点,但是肯定它必须有一些开销。即使在您的应用程序是单线程的情况下,该开销也会存在。

以上是这种情况吗?如果是这样,这是否意味着如果您不使用线程安全保证,就违反了“您不为不使用的产品付费”的原则?

最佳答案

如果我们在cppreference页面上查找std::shared_ptr,则它们在“实现说明”部分中声明以下内容:



有趣的是注意到一个实际的实现,例如libstdc++实现文档here说:



“选择锁定策略”部分说(重点是我):



并进一步说(强调我的):



因此,至少在此实现中,您无需为不使用的东西付费。

08-06 03:39