使用共享指针的函数调用,其对象应为 const

function call with shared pointer whose object should be const

本文关键字:对象 const 函数调用 共享 指针      更新时间:2023-10-16

我有一个变量a,其类型是A

A a;

我想调用一个函数,该函数将类型A的 const 引用作为输入参数。

fun(const A &a);

经过一些代码更改后,我决定最好将变量a的类型更改为std::shared_ptr<A>

std::shared_ptr<A> a;

更改函数fun的最佳方法是什么,以便我确保对象a永远不会被更改(它应该保持恒定(?

fun应该保持原样,我应该这样称呼它:

fun(*a.get())

还是有其他选择?不知何故,这对我来说感觉很丑陋...

我想简单地将fun更改为fun(const std::shared_ptr<A> &a)是行不通的,因为我想确保该函数不会更改基础对象而不是共享指针。

我无法使用std::shared_ptr<const A> a因为有必要在某些时候更改变量a

由于void fun(const A& a);似乎对参数的生命周期没有任何影响,因此保留现在的签名(传递std::shared_ptrstd::unique_ptr作为函数参数总是暗示这些生命周期的含义(。这样称呼它:

auto a = std::make_shared<A>();
fun(*a);

这样,您可以绕过冗长的*a.get(),直接使用std::shared_ptr提供的取消引用运算符。