私はこのコードを持っています。タイプ 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
が aではなく aRecord&
であるためreference_wrapper<Record>
、a を割り当てることができないためRecord
ですか? そんなこと許してやり過ぎだと思っreference_wrapper<Record>::operator=
た?
編集:印刷ループが配置されていたデストラクタの問題であることがわかりました。ある時点で、値によって HiscoreTable をヘルパー関数に渡し、ヘルパー関数の最後で破棄されたときに、呼び出しサイトの HiscoreTable を無効にしました。印刷によって参照が壊れる理由はわかりませんが、それが起こったことだと思います。