我正在使用某个大型且维护良好的开源C ++库,并遇到了一个具有
形式的构造函数的类定义class SomeClass {
SomeClass( const boost::shared_ptr<SomeOtherClass>& );
}
我的问题是:通过引用传递const boost::shared_ptr<T>
有什么意义?通过值boost::shared_ptr<T>
确实存在不可忽视的开销,或者通过我不知道的值传递boost::shared_ptr<T>
是否存在其他类型的危险?
答案 0 :(得分:9)
通过值传递它将复制它,从而导致引用计数增量,在所有线程之间同步。绝对不容忽视。
答案 1 :(得分:1)
您不仅避免了复制shared_ptr
的任何(轻微)开销,而且还声明您不打算保留指针的副本。我不认为你可以复制shred_ptr
而不修改它,const
会阻止它。
答案 2 :(得分:1)
如果您不需要副本,那么为什么要复制?如果他们继续将其复制到体内,那将是另一个问题。