如果我有一个需要使用 shared_ptr
的函数,那么将一个对它的引用传递给它不是更有效吗(这样可以避免复制 shared_ptr
对象) ?
可能的副作用是什么?
我设想了两种可能的情况:
1)函数内部的参数复制,如
ClassA::take_copy_of_sp(boost::shared_ptr<foo> &sp)
{
...
m_sp_member=sp; //This will copy the object, incrementing refcount
...
}
2)在函数内部只使用参数,如
Class::only_work_with_sp(boost::shared_ptr<foo> &sp) //Again, no copy here
{
...
sp->do_something();
...
}
在这两种情况下,我看不出有什么好的理由通过值而不是通过引用传递 boost::shared_ptr<foo>
。通过值传递只会由于复制而“临时”增加引用计数,然后在退出函数范围时减少引用计数。
我是不是忽略了什么?
只是澄清一下,在阅读了几个答案之后: 我完全同意过早优化的担忧,我总是试图先分析,然后在热点工作。如果你明白我的意思,我的问题更多的是从纯技术代码的角度出发。