【发布时间】:2014-11-30 01:22:46
【问题描述】:
我有这个代码。 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 不是Record& 而是reference_wrapper<Record>,因此我不能为它分配Record?我以为reference_wrapper<Record>::operator= 已经超载允许这样的事情发生?
编辑:原来这是我的析构函数中的问题,打印循环所在的位置。在某些时候,我通过值将 HiscoreTable 传递给辅助函数,当它在辅助函数结束时被破坏时,它使调用站点的 HiscoreTable 无效。我不知道为什么打印会破坏引用,但我想这就是发生的事情。
【问题讨论】:
-
为什么不使用调试器,对所有异常启用中断,并将堆栈回溯到代码中的原始点?总比猜测好。
标签: c++ vector reference reference-wrapper