相关疑难解决方法(0)

C++ - 将引用传递给std :: shared_ptr或boost :: shared_ptr

如果我有一个需要使用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值而不是引用的充分理由.按值传递只会"暂时"增加由于复制而引用的引用计数,然后在退出函数范围时减少它.我忽略了什么吗?

只是为了澄清,在阅读了几个答案之后:我完全赞同过早优化的问题,而且我总是试着先在热点上进行首次剖析.如果你知道我的意思,我的问题更多来自纯粹的技术代码观点.

c++ boost pass-by-reference pass-by-value shared-ptr

113
推荐指数
6
解决办法
5万
查看次数

通过引用传递智能指针

智能指针通常很小,因此通过值传递不是问题,但是将引用传递给它们是否有任何问题; 或者更确切地说是否有特定情况不得这样做?

我正在编写一个包装器库,我的几个类将智能指针对象包装在底层库中...我的类不是智能指针,但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类有一天不会超越包装智能指针,所以通过值传递让我感到紧张.

c++ visual-studio-2005

17
推荐指数
1
解决办法
9672
查看次数