我有一个带有私有属性的类,它是一个向量 . 做getter函数的最佳方法是什么?
返回整个矢量: vector<char*> getNames() { return names; }
vector<char*> getNames() { return names; }
这会返回副本还是指针?这是私人的吗?
返回迭代器: vector<char*>::iterator getNames() { return names.begin(); }
vector<char*>::iterator getNames() { return names.begin(); }
使向量公开
我知道这对于OOP来说是不好的做法,只是列出选项 .
返回 const vector<char*>& . 它确保它赢得't be modified outside and it doesn'吨复制 .
const vector<char*>&
如果你实际上是在内部使用 vector<char *> ,那么确保用户不会修改名称的唯一方法(没有丑陋且明显的 const_cast )将返回 vector<const char *> 的值:
vector<char *>
const_cast
vector<const char *>
vector<const char *> getNames() const { return {names.begin(), names.end()}; }
或者,预C11:
vector<const char *> getNames() const { return vector<const char *>(names.begin(), names.end()); }
通过值或const引用返回 vector<char *> 将阻止用户修改向量本身,但不会修改它指向的字符串的内容 .
使用 vector<std::string> 要好得多,在这种情况下你可以简单地返回一个const引用 .
vector<std::string>
2 回答
返回
const vector<char*>&
. 它确保它赢得't be modified outside and it doesn'吨复制 .如果你实际上是在内部使用
vector<char *>
,那么确保用户不会修改名称的唯一方法(没有丑陋且明显的const_cast
)将返回vector<const char *>
的值:或者,预C11:
通过值或const引用返回
vector<char *>
将阻止用户修改向量本身,但不会修改它指向的字符串的内容 .使用
vector<std::string>
要好得多,在这种情况下你可以简单地返回一个const引用 .