这是通过引用分配的正确示例吗?

Is this a correct example of assigning by reference?

本文关键字:引用 分配      更新时间:2023-10-16

我有一个getter方法,它返回一个声明为私有的数组。

在 .h 中:

    private:
    CStringArray a;

在.cpp:

    CStringArray &Define::GetDefined()
    {
       return a;
    }

在另一个.cpp:

    int size = (define.GetDefined()).GetCount();

这确实返回了正确的 int 值。但这是通过引用分配的正确示例吗?

是的,尽管最终.cpp文件中的额外大括号是不必要的,对读者没有帮助,所以你可能不应该打扰

例如。

int size = define.GetDefined().GetCount(); 

您可能还应该提到,用户应该确保通过引用返回的对象未分配给即将变为无效的堆栈的某些部分。

例如:

A& method() {
   return A();
}

或即将变得无效的内存的任何部分:

class A{
  B member;
  B& get_b_ref() {
    return member;
  }
}
int main() {
  A* a_ptr = new A();
  B& b_ref = a_ptr->get_b_ref();
  delete a_ptr;
  b_ref.any_method(); // yikes
}

是的,从 getter 返回引用是绝对正确的。

你甚至可能想要返回 const Array &,如果这个对象不应该从外部修改