当函数采用 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/