我有以下两个功能:
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有一些必须由复制/移动构造函数复制的资源?我问这个问题,因为这条线似乎真的引入了一些神秘的错误。
答案 0 :(得分:6)
这是正确和有效的。使用*ptr
执行间接访问只会获得ptr
指向的值,然后通过引用get_some_info_from_a
传递该值。永远不会复制该值。
答案 1 :(得分:1)
这很好,并且不会调用任何复制/移动ctor,因为您正在通过引用进行调用。但是,函数签名中的const
或两个(如果是成员函数)不会错过:
T get_some_info_from_a(const A& ref) const {