표준 라이브러리 용기에 저장된 것은 인용입니까 아니면 실체 대상입니까?
1130 단어 C-C++
인용을 저장하면 복사 구조를 호출하는 데 드는 비용을 줄일 수 있지만, 그러면 local object (국부 대상) 의 인용을 저장할 수 없기 때문에 용기의 사용 범위에 큰 한계를 가져올 수 있다.그래서 용기에 저장된 것은 실체의 대상이다.
이것은 오늘 코드를 써서 버그를 찾았을 때 발견한 것이다.장면은 코드가 파일에서 데이터를 읽고list에 저장합니다.append를 호출한 후 값이 변한 것을 발견했고 문자열은 빈 문자열로 변했고 int는 무작위 값으로 변했다.(이하 Qt 코드)
bool DataSource::setDataPath(QString path)
{
bool ret = true;
QFile file(path);
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
while(!in.atEnd())
{
ScoreInfo info;
if(parse(in.readLine(), info))
{
m_data.append(info);// ,m_data
}
}
file.close();
}
else
{
ret = false;
}
return ret;
}
나중에야 내가 ScoreInfo 클래스에 복사 구조 함수에 구덩이를 남겼는데 채우지 않아서 용기에 저장된 것은 무작위 값이었다.
append 함수의 인터페이스는 다음과 같습니다.
void append(const T &t);
이 인터페이스의 모양은 나로 하여금 인용이라고 착각하고 이 문제를 진지하게 퇴고하지 못하게 했다.실제로 이 매개 변수는 인용하기 위해 실참에서 형삼 t로 복사하는 것이 한 번 적을 뿐입니다. t에서 용기로 복사하는 대상은 복사 구조 함수를 한 번 호출해야 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간지 법 기년 알고리즘텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.