vector<Foo*>& getVectorOfFoo();
Run Code Online (Sandbox Code Playgroud)
我想向其他人提供我的Foo对象列表.这是最好的方法吗?我在这里返回一个参考而不是复制正确吗?
调用者可以(意外地)修改此列表吗?有没有办法避免这种可能性?我可以返回const向量吗?但是他们总是可以修改Foo对象,而我在那里做的也不多.10-20个不同的人将编写使用此Foo列表的代码.
首先不要返回指针列表.
这使得对允许行动的双重不清楚.
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)