4

我正在使用某个大型且维护良好的开源 C++ 库,并遇到了一个具有以下构造函数的类定义

class SomeClass {
    SomeClass( const boost::shared_ptr<SomeOtherClass>& );
}

我的问题是:const boost::shared_ptr<T>通过引用传递 a 有什么意义?是否真的存在与传递按值相关的不可忽略的开销,或者传递一个我不知道的boost::shared_ptr<T>其他类型的危险?boost::shared_ptr<T>

4

3 回答 3

9

按值传递它会复制它,这会导致引用计数增加,并在所有线程之间同步。绝对不容忽视。

于 2012-05-05T02:15:20.580 回答
1

您不仅避免了复制 a 的任何(轻微)开销,shared_ptr而且还声明了不保留指针副本的意图。我不认为你可以在shred_ptr不修改它的情况下复制它,并且const会阻止它。

于 2012-05-05T02:15:37.133 回答
1

如果您不需要复制,那为什么要复制?如果他们继续将其复制到正文中,那将是另一个问题。

于 2012-05-05T02:20:15.537 回答