【发布时间】:2012-05-05 10:22:16
【问题描述】:
我正在使用某个大型且维护良好的开源 C++ 库,并且遇到了一个具有以下构造函数的类定义
class SomeClass {
SomeClass( const boost::shared_ptr<SomeOtherClass>& );
}
我的问题是:通过引用传递 const boost::shared_ptr<T> 有什么意义?通过值传递boost::shared_ptr<T> 是否真的存在不可忽略的开销,或者通过值传递boost::shared_ptr<T> 是否存在其他我不知道的危险?
【问题讨论】:
-
至少从我所看到的情况来看,更惯用的方法是按值传递本机数据类型,并通过 const 引用传递其他内容。 Bjarne 在他的风格和技术常见问题解答中提到了“值得”的任何东西,而不是几个词。
-
@chris:本地或自定义无关紧要。重要的是复制所花费的时间。包裹在
struct中的int仍然可能最好按价值完成。 -
@DeadMG,没错,但如果你要猜测大小,那么类很可能足够大,值得。花时间检查您通过的每个人的大小不值得节省少量时间。
-
在您进行分析之前,这两种方式都没有关系。在那之前,它是宗教、猜测和假设。
-
@CrazyEddie:不是宗教或猜测,假设我会给你,但这是一个很好的经验法则。一般来说,经验法则更好,除非您的应用程序的性能非常重要,以至于必须进行分析。即便如此,pass-by-ref 和 pass-by-value 之间的时间差异可能会或可能不会出现在雷达上,即使差异很大,您确定您知道如何识别问题,如果你看到它没有真正尝试两种方式?在这种情况下,经验法则在大多数情况下可能会更好地坚持。