如何正确返回大矢量

5 c++ stl vector

   vector<Foo*>&         getVectorOfFoo();
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ork 9

首先不要返回指针列表.
这使得对允许行动的双重不清楚.

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

boost::ptr_vector<Foo> const&  getVectorOfFoo();
Run Code Online (Sandbox Code Playgroud)

现在用户无法改变返回的向量.

例:

#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();
}
Run Code Online (Sandbox Code Playgroud)