c++ - 我们应该通过引用还是按值传递 shared_ptr ?

标签 c++ c++11 boost shared-ptr

当函数采用 shared_ptr (来自 boost 或 C++11 STL),你通过了吗:

  • 通过 const 引用:void foo(const shared_ptr<T>& p)

  • 或按值:void foo(shared_ptr<T> p) ?

我更喜欢第一种方法,因为我怀疑它会更快。但这真的值得吗?还是有其他问题?

能否请您说明您选择的原因,或者如果是,您认为这无关紧要的原因。

最佳答案

Scott、Andrei 和 Herb 在 Ask Us Anything 期间讨论并回答了这个问题。 session C++ and Beyond 2011 .观看从 4:34 on shared_ptr performance and correctness .

简而言之,没有理由按值传递,除非目标是共享对象的所有权(例如,在不同的数据结构之间,或在不同的线程之间)。

除非您可以按照 Scott Meyers 在上面链接的谈话视频中解释的那样对其进行移动优化,但这与您可以使用的实际 C++ 版本有关。

GoingNative 2012 期间,此讨论发生了重大更新。 session 的Interactive Panel: Ask Us Anything!值得一看,尤其是来自22:50 .

关于c++ - 我们应该通过引用还是按值传递 shared_ptr ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3310737/

相关文章:

c++ - 将 'using std::foo' 指令应用于本地构造函数初始化程序列表 (C++)

c++ - 通过引用传递数组到线程

c++ - 是否有用于 Debian/Ubuntu 的 Boost 1.5.3 软件包?

c++ - 我在 Visual Studio 2012 Pro 中有一个 C++ DLL 类型的项目,但我无法将其编译为 CLR - 为什么会这样?

c++ - 如何更改 QGraphicsView 所选项目的颜色

c++ - 以线程安全方式每秒打印当前队列元素数

c++ - 如何强制执行 'override' 关键字?

c++ - 链接错误 : ambiguous libboost*. lib 与 boost*.lib

python - 从哪里获得 boost/python.hpp?

c++ - 为 macOS arm64 arch 编译