具有对象应为 const 的共享指针的函数调用

function call with shared pointer whose object should be const

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

A a;

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

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提供的dereference operator