【发布时间】:2012-07-12 06:07:41
【问题描述】:
可能重复:
Should I pass a shared_ptr by reference?
Passing smart pointers as arguments
我应该通过值还是通过常量引用传递它?我已经阅读了许多关于是通过值还是通过常量引用传递复制可构造对象的经验法则。如:
- 通过常量引用传递对象并按值传递内置类型(函数对象除外)
- 按值传递,除非对象(包括动态内存)的大小小于 2 * double 的大小。
您能否解释一下这些规则如何适用于std::shared_ptr<Resource>?我知道该对象可能非常小,可能是一个指针和一个引用计数器,但它仍然是一个对象。这里的最佳做法是什么?
【问题讨论】:
-
我的经验法则是:当你想要引用语义时通过引用传递,当你想要值语义时通过值传递。我认为它们优于您一直在阅读的那些。 (它们也更容易记住:P)
-
@RMartinhoFernandes: const 引用是如何计算的?我经常阅读的经验法则建议在我本质上对值语义感兴趣(我认为这意味着在不更改对象的情况下查询对象)而不是引用语义(我希望能够修改对象的情况下)通过 const 引用传递.) 或者你只是在陈述一个重言式:“当你想要引用时通过引用传递,当你想要值时通过值传递”?
-
引用,无论是否为 const,都提供引用语义:当变量引用同一个对象时。缺少引用提供了值语义:当变量引用不同的对象时。您描述的是可变性,这是选择 const 或 non-const 的标准。
标签: c++ c++11 shared-ptr