표준 라이브러리 용기에 저장된 것은 인용입니까 아니면 실체 대상입니까?

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에서 용기로 복사하는 대상은 복사 구조 함수를 한 번 호출해야 합니다.

좋은 웹페이지 즐겨찾기