在需要引用时传递指针

时间:2014-07-09 14:48:52

标签: c++ pointers reference

我有以下两个功能:

void B::set(A * ptr){
  this->a = ptr;
  this->info = get_some_info_from_a(*ptr);
}

T get_some_info_from_a(A& ref){
  return ref.info;
}

如您所见,我将A * ptr作为set(...)中的指针,但我需要一个引用来调用get_some_info_from_a(...)。所以我取消引用ptr并将其作为一个参数。

这是对的吗?是否有效,因为A有一些必须由复制/移动构造函数复制的资源?我问这个问题,因为这条线似乎真的引入了一些神秘的错误。

2 个答案:

答案 0 :(得分:6)

这是正确和有效的。使用*ptr执行间接访问只会获得ptr指向的值,然后通过引用get_some_info_from_a传递该值。永远不会复制该值。

答案 1 :(得分:1)

这很好,并且会调用任何复制/移动ctor,因为您正在通过引用进行调用。但是,函数签名中的const或两个(如果是成员函数)不会错过:

T get_some_info_from_a(const A& ref) const {