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

时间:2014-07-17 10:41:09

标签: c++ boost

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

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

3 个答案:

答案 0 :(得分:3)

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

optional没有上述任何内容。

答案 1 :(得分:2)

shared_ptr还有许多额外的职责 - 比如引用计数 - 所以是的,内存和同步都有开销。仅凭这个原因使用shared_ptr是愚蠢的。

答案 2 :(得分:1)

optional<T>或者是T的实例。 shared_ptr或者是T的拥有智能指针。

与共享指针相比,传递by-value的任何正确有效的传递都是正确有效的.- / p>

分配是相当昂贵的操作,有时候你的意思是按价值。此外,optional清楚地说明了您的意思,而shared_ptr有很多含义。