使用boost::shared_ptr而不是boost::optional的缺点

Drawbacks of using boost::shared_ptr instead of boost::optional

本文关键字:boost optional 缺点 ptr shared 使用      更新时间:2023-10-16

谁能解释一下,在内存和性能方面,使用boost::shared_ptr来表示一个可能是null或未定义的值,而不是使用boost::optional,是否有缺点?

我看到,在我工作的地方,许多人使用boost::shared_ptr来表示可以是null的值。在性能或内存使用方面是否有开销?

除了shared_ptr还必须管理线程安全引用计数这一明显事实之外,还存在分配问题。optional是基于堆栈的,这意味着它不会执行任何动态分配。shared_ptr必须执行至少一个(通常是两个:对象和控制块)动态分配。

optional不做上述任何一项。

shared_ptr有许多额外的责任-像引用计数-所以确实有内存和同步的开销。仅仅因为这个原因而使用shared_ptr是愚蠢的。

optional<T>是否为T的实例。shared_ptr是一个指向T的智能指针,或者不是。

与共享指针相比,任何按值传递正确且有效的东西都将按可选传递正确且有效。

分配是相当昂贵的操作,按值有时就是您所指的。此外,optional清楚地表达了您的意思,而shared_ptr有许多含义。