【发布时间】:2019-03-06 13:51:43
【问题描述】:
我想知道在将 shared_ptr 作为参数传递给采用 shared_ptr 的函数时,隐式转换是否涉及一些隐藏成本(例如构建额外副本)。
void f(std::shared_ptr<const Widget> ){}
int main(){
std::shared_ptr<Widget> p;
f(p);
return 0;
}
我假设在这两种情况下我都要为引用计数的递增和递减付费。
此外,我想知道如果我使用以下签名定义函数f(),为什么代码无法编译:
void f(shared_ptr<const Widget>& ){}
更让我惊讶的是,它确实做到了:
void f(const shared_ptr<const Widget>& ){}
【问题讨论】:
-
谢谢,我编辑了这个问题。
-
1.
T是什么? 2. 提供一个可编译的例子或至少一个错误信息。 -
如果
f只关心在其持续时间内使用Widget,请传递const Widget *(或const Widget &,如果你知道它是非空的)。只有当f希望参与拥有Widget(即它将指针存储在某处)时,您才应该传递shared_ptr -
@Caleth 假设我无法更改 f 的签名。无论如何,我完全同意你的建议。
标签: c++ c++11 casting const-correctness