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

时间:2012-08-20 14:44:32

标签: c++ mfc

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

在.h:

    private:
    CStringArray a;

在。 CPP:

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

在另一个.cpp:

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

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

2 个答案:

答案 0 :(得分:2)

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

例如

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

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

例如:

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
}

答案 1 :(得分:1)

是的,从getter返回引用是完全正确的。

如果不应该从外部修改此对象

,您甚至可能想要返回const Array&