首页  >  文章  >  后端开发  >  我应该按值还是按引用传递“shared_ptr”?

我应该按值还是按引用传递“shared_ptr”?

Barbara Streisand
Barbara Streisand原创
2024-10-31 14:24:02110浏览

Should I Pass `shared_ptr` by Value or by Reference?

传递共享指针:通过引用或按值

将shared_ptr(来自boost或C 11 STL)传递给函数时,选择通过 const 引用 (void foo(const shared_ptr& p)) 传递还是通过值传递 (void foo(shared_ptr p)) 一直是一个争论的话题。

传统上,它人们相信通过引用传递会更快,因为它避免了不必要的复制操作。然而,正如 C and Beyond 2011 专家(Scott、Andrei 和 Herb)所讨论的那样,情况已不再如此。

应该按值传递还是按引用传递?

除非明确需要共享对象的所有权(例如在数据结构或线程之间),否则没有令人信服的理由按值传递shared_ptr。首选通过 const 引用传递,原因如下:

  • 性能: 通过 const 引用传递通常比按值复制 shared_ptr 更快,尤其是对于大型对象。这是因为仅传递指针本身,而不是整个对象。
  • 正确性: 通过 const 引用传递可确保在函数内无法修改shared_ptr。这有助于防止对共享对象的意外更改。

何时按值传递

建议按值传递shared_ptr的唯一时间是目的是将对象的所有权转移给函数。当函数需要负责管理对象的生命周期时,通常会出现这种情况。

其他注意事项

为了获得最佳性能,重要的是要考虑shared_ptr是否可以进行移动优化。正如 Scott Meyers 所解释的,移动优化可以消除不必要的复制操作。然而,这种优化仅在某些版本的 C 中可用。

以上是我应该按值还是按引用传递“shared_ptr”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn