-1

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

在.h中:

    private:
    CStringArray a;

在 。cp:

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

在另一个 .cpp 中:

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

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

4

2 回答 2

2

是的,尽管最终 .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
}
于 2012-08-20T14:53:00.817 回答
1

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

如果不应从外部修改此对象,您甚至可能想要返回 const Array &

于 2012-08-20T14:52:19.743 回答