有人可以解释在内存和性能方面是否存在使用boost::shared_ptr
来表示可能null
或未定义的值而不是使用boost::optional
的值的缺点?
我看到,在我工作的地方,很多人使用boost::shared_ptr
来表示可以null
的值。在性能或内存使用方面是否存在开销?
答案 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
有很多含义。