使用共享指针的函数调用,其对象应为 const
function call with shared pointer whose object should be const
我有一个变量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_ptr
或std::unique_ptr
作为函数参数总是暗示这些生命周期的含义(。这样称呼它:
auto a = std::make_shared<A>();
fun(*a);
这样,您可以绕过冗长的*a.get()
,直接使用std::shared_ptr
提供的取消引用运算符。
相关文章:
- 被解释为低级别const的const对象的地址
- 使用共享指针的函数调用,其对象应为 const
- 如何从构造函数副本 T(const T&)调用对象 T?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 无法使用类型 'const char *' 的左值初始化类型 'char *' 的成员子对象
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- "this"指向的对象是否与 const 对象相同?
- const auto & 和 auto & if reference 对象之间的区别是 const
- 将对象传递给函数而不将其包装到 std::ref 中,而参数被指定为 const 引用
- C++ - 确定 const char* 是指向字符串文本对象还是动态对象
- 为什么 const YAML::Node 对象的行为不像 yaml-cpp 中的类似值的对象?
- 从 const 对象访问非 const 方法
- 将非 const 对象用于 const 参数
- 如何键入用于const对象的自定义io操纵器
- 对临时对象的Const引用不会延长其生存期
- 正在通过const-ref未定义的行为捕获新构造的对象
- 具有成员变量的对象 Const 数组 = 先前索引成员变量的总和
- 为什么我构建的临时对象const不可变
- 强制用户声明对象const