返回私人向量

时间:2014-11-19 19:29:08

标签: c++ oop vector iterator private

我有一个带有私有属性的类,它是一个向量。做getter函数的最佳方法是什么?

  1. 返回整个向量:vector<char*> getNames() { return names; }
    • 这会返回副本还是指针?自私有以来,这是否可以访问?
  2. 返回迭代器:vector<char*>::iterator getNames() { return names.begin(); }
  3. 将矢量公开
    • 我知道这对OOP来说是不好的做法,只列出选项。

2 个答案:

答案 0 :(得分:7)

const vector<char*>&返回。它确保它不会在外面修改,也不会复制。

答案 1 :(得分:2)

如果您实际在内部使用vector<char *>,那么确保用户不会修改名称(没有丑陋且明显的const_cast)的唯一方法是返回{{1}按值:

vector<const char *>

或者,预C ++ 11:

vector<const char *> getNames() const { return {names.begin(), names.end()}; }

通过值或const引用返回vector<const char *> getNames() const { return vector<const char *>(names.begin(), names.end()); } 将阻止用户修改向量本身,但不会修改它指向的字符串的内容。

使用vector<char *>要好得多,在这种情况下,您只需返回一个const引用。