具有对象应为 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_ptr
或 std::unique_ptr
作为函数参数传递总是暗示那些一生的影响)。像这样称呼它:
auto a = std::make_shared<A>();
fun(*a);
这样就可以绕过*a.get()
的啰嗦,直接使用std::shared_ptr
提供的dereference operator。
我有一个变量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_ptr
或 std::unique_ptr
作为函数参数传递总是暗示那些一生的影响)。像这样称呼它:
auto a = std::make_shared<A>();
fun(*a);
这样就可以绕过*a.get()
的啰嗦,直接使用std::shared_ptr
提供的dereference operator。