C++如何正确使用智能指针?看完这4个点你就明白了( 八 )

性能

  1. 内存占用高 。 shared_ptr 的内存占用是裸指针的两倍 。 因为除了要管理一个裸指针外 , 还要维护一个引用计数 。 因此相比于 unique_ptr shared_ptr 的内存占用更高

  2. 原子操作性能低 。 考虑到线程安全问题 , 引用计数的增减必须是原子操作 。 而原子操作一般情况下都比非原子操作慢 。

  3. 使用移动优化性能 。 shared_ptr 在性能上固然是低于 unique_ptr 。 而通常情况 , 我们也可以尽量避免 shared_ptr 复制 。 如果 , 一个 shared_ptr 需要将所有权共享给另外一个新的 shared_ptr , 而我们确定在之后的代码中都不再使用这个 shared_ptr , 那么这是一个非常鲜明的移动语义 。 对于此种场景 , 我们尽量使用 std::move , 将 shared_ptr 转移给新的对象 。 因为移动不用增加引用计数 , 因此性能比复制更好 。

使用场景

    推荐阅读