假设我有一个带有指向参数的指针的函数。
void foo(Info* bar) {
}
如果我在任何时候需要其值而不是取消引用bar,请在函数代码的开头执行此操作:
Info& i_val = *Info;
我是通过这样做引入任何特定类型的(明显的)开销吗?或者它就像我只是取消引用指针一样?
请注意,我不会接受任何告诉我这是一个坏主意的问题(没有正当理由),抱怨在C ++代码库中使用原始指针。
另请注意,我无法更改功能的签名。
答案 0 :(得分:4)
我是通过这样做来引入任何特定类型的(明显的)开销吗?
没有。参考处理非常有效,因此除了在参考本身的自动区域中存储之外,您没有使用任何其他资源。
或者它就像我刚刚取消引用指针一样?
创建引用和解除引用原始指针之间的最大区别是重新分配指针时会发生什么。该引用将继续引用bar
在创建i_val
时指向的对象,而直接解除引用bar
将为您提供当前位置。