我在http://developer-resource.blogspot.com.au/2009/01/pros-and-cons-of-reuring-references.html看到的博客写道:
在这个代码库中工作了一段时间后,我相信返回引用是邪恶的,应该像返回指针一样对待,这是避免它。
例如,调试一周后出现的问题如下:
class Foo {
std::vector< Bar > m_vec;
public:
void insert(Bar& b) { m_vec.push_back(b); }
Bar const& getById(int id) { return m_vec[id]; }
}
此示例中的问题是客户端正在调用并获取存储在向量中的引用。现在客户插入一堆新元素后会发生什么?向量需要在内部调整大小并猜测所有这些引用会发生什么?就是那里无效。这导致了一个很难找到的错误,该错误只需通过删除 & 即可修复。
我看不出代码有什么问题。我是否误解了通过引用和 STL 容器返回,或者帖子不正确?