c++ - 如何正确返回一个大 vector

标签 c++ stl vector

   vector<Foo*>&         getVectorOfFoo();

我想向其他人提供我的 Foo 对象列表。这是最好的方法吗?我在这里返回一个引用而不是复制正确?

调用者可以(不小心)修改这个列表吗?有没有办法避免这种可能性?我可以返回 const vector 吗?但是他们也总是可以修改 Foo 对象,而我在那里做的不多。 10-20 个不同的人将编写使用此 Foo 列表的代码。

最佳答案

首先不要返回指针列表。
这使得允许的操作更加不清楚。

Boost 有一个解决方案(像往常一样)。
返回一个指针容器。这会将指针公开为普通成员。

boost::ptr_vector<Foo> const&  getVectorOfFoo();

现在用户无法更改返回的 vector 。

例子:

#include <boost/ptr_container/ptr_vector.hpp>

class Foo
{
    public:
        void plop()         {}
        void poop() const   {}
};

boost::ptr_vector<Foo> const&  getVectorOfFoo()
{
    static boost::ptr_vector<Foo>  instance;  // Create and fill container with FOO objects.
    instance.push_back(new Foo);
    return instance;
}

int main()
{
    boost::ptr_vector<Foo> const&  value = getVectorOfFoo();  

    value[0].plop();  // Fail. not a const method (comment out this line)
    value[0].poop();
}

关于c++ - 如何正确返回一个大 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6455783/

相关文章:

c++ - 如何在 Arduino 上将时间设置为中央时区?

c++ - 我可以在#include 指令中使用预处理器变量吗?

c++ - 初始化在构造函数中实现自身的类模板

c++ - 作为 std::vector 包装器的用户定义容器应该继承还是包含 std::vector?

c++ - 将模板类作为参数传递

c++ - C++ 中的定点组合器

c++ - C++ STL 数组的迭代器大小

c++ - 如何摆脱 FormatMessageA 错误消息中附加的 ".\r\n"字符?

c++ - 分配结构列表的 vector

c++ - 默认情况下,为什么 C++ 不检测何时使用 [ ] 运算符访问超出范围的 vector 元素?