【发布时间】:2019-12-14 14:11:37
【问题描述】:
在阅读开源代码时,我发现以下内容以两种不同的方式将共享指针传递给函数。
class A{A();};
typedef std::shared_ptr<A> A_Ptr;
void func1(A_Ptr a);
void func2( const A_Ptr& a);
使用 const 时将其作为引用传递的原因是什么?我了解 func2 的编写者并不期望该函数能够更改 a 中的任何内容。但是我们不能这样做const A_Ptr a吗?另外,我们不应该在 func1 中使用A_Ptr & a 传递它的原因是什么?
以上在代码中的出现:
Git:https://github.com/uzh-rpg/rpg_svo/
void FrameHandlerMono::setFirstFrame(const FramePtr& first_frame)
【问题讨论】:
-
谁说过我们“需要”?无论如何,如果您没有获得所有权,则应该传递引用或原始指针,而不是拥有智能指针。
-
您的意思是专门针对 shared_ptr 还是您想知道为什么要普遍使用 const 引用?
-
boost是什么?std::shared_ptr你在哪里标记了你的问题?阅读How to create a Minimal, Reproducible Example。 -
通过常量引用而不是按值传递或按指针传递的所有常见原因。对于
func2,不调用复制构造函数,并且更少的字节被压入/弹出到堆栈中。通过 const 引用传递,就像func2的情况一样,如果这样做有意义的话,您还可以传递一个临时引用:ala :func2(make_shared<Frame>()) -
@MichaelMahn 感谢您的评论。我添加了更多细节。
标签: c++ c++11 shared-ptr smart-pointers