我有这个代码。scores
是HiscoreTable
类型 的字段std::vector<reference_wrapper<Record>>
void HiscoreTable::replaceRecord(Record rec)
{
bool found = false;
for (reference_wrapper<Record> r : scores) {
if (r.get().name == rec.name) {
r = rec;
found = true;
break;
}
}
if (!found) {
scores.push_back(rec);
}
}
如果我尝试这样做for(reference_wrapper<Record> r : scores) cout << r.get() << endl;
,则会抛出一个 bad_alloc。是不是因为r
is not a Record&
but areference_wrapper<Record>
所以我不能给Record
它分配 a ?我以为reference_wrapper<Record>::operator=
是超载允许这样的事情?
编辑:原来这是我的析构函数中的一个问题,打印循环所在的位置。在某些时候,我通过值将 HiscoreTable 传递给辅助函数,当它在辅助函数结束时被破坏时,它使调用站点的 HiscoreTable 无效。我不知道为什么打印会破坏参考,但我想这就是发生的事情。