이 코드가 있습니다. scores
유형 std::vector<reference_wrapper<Record>>
내 bad_alloc은 어디에서 오는거야?
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);
}
}
의 HiscoreTable
의 필드 내가 for(reference_wrapper<Record> r : scores) cout << r.get() << endl;
을 수행하려고 할 경우 bad_alloc 뿐이다가 발생합니다. 그 이유는 r
이 Record&
이 아니고 reference_wrapper<Record>
이 아니기 때문에 Record
을 할당 할 수 없기 때문입니까? 나는 그런 것을 허용하기 위해 reference_wrapper<Record>::operator=
이 과부하 된 줄 알았습니까?
EDIT : 인쇄 루프가있는 소멸자의 문제였습니다. 어떤 시점에서 HiscoreTable을 값으로 도우미 함수에 전달했으며 도우미 함수가 끝날 때 destructed가되면 callsite의 HiscoreTable을 무효화했습니다. 왜 인쇄가 레퍼런스를 깨뜨릴 지 모르겠지만, 그런 일이 일어난 것 같아요.
왜 디버거를 사용하고 모든 예외에서 브레이크를 사용하며 코드에서 출발 점으로 스택을 백 트레이스하지 않습니까? 추측하는 것보다 낫지. –