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/