我有一个带有私有属性的类,它是一个向量。做getter函数的最佳方法是什么?
vector<char*> getNames() { return names; }
vector<char*>::iterator getNames() { return names.begin(); }
答案 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引用。