如果我有一个需要使用a的函数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
...
}
Run Code Online (Sandbox Code Playgroud)
2)在函数内部仅使用参数,例如
Class::only_work_with_sp(boost::shared_ptr<foo> &sp) //Again, no copy here
{
...
sp->do_something();
...
}
Run Code Online (Sandbox Code Playgroud)
我无法在两种情况下都看到传递boost::shared_ptr<foo>
by值而不是引用的充分理由.按值传递只会"暂时"增加由于复制而引用的引用计数,然后在退出函数范围时减少它.我忽略了什么吗?
只是为了澄清,在阅读了几个答案之后:我完全赞同过早优化的问题,而且我总是试着先在热点上进行首次剖析.如果你知道我的意思,我的问题更多来自纯粹的技术代码观点.
智能指针通常很小,因此通过值传递不是问题,但是将引用传递给它们是否有任何问题; 或者更确切地说是否有特定情况不得这样做?
我正在编写一个包装器库,我的几个类将智能指针对象包装在底层库中...我的类不是智能指针,但API当前通过值传递智能指针对象.
例如当前代码:
void class::method(const AnimalPtr pAnimal) { ... }
Run Code Online (Sandbox Code Playgroud)
变
void class::method(const MyAnimal &animal){...}
Run Code Online (Sandbox Code Playgroud)
MyAnimal
我的新包装类封装在哪里AnimalPtr
.
无法保证Wrapper类有一天不会超越包装智能指针,所以通过值传递让我感到紧张.