首页 文章

返回私人向量

提问于
浏览
4

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

  • 返回整个矢量: vector<char*> getNames() { return names; }

  • 这会返回副本还是指针?这是私人的吗?

  • 返回迭代器: vector<char*>::iterator getNames() { return names.begin(); }

  • 使向量公开

  • 我知道这对于OOP来说是不好的做法,只是列出选项 .

2 回答

  • 2

    返回 const vector<char*>& . 它确保它赢得't be modified outside and it doesn'吨复制 .

  • 7

    如果你实际上是在内部使用 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引用 .

相关问题