Исключение "нарушение доступа для чтения" в методе std::exchange при возврате значения из функции

Есть метод bool DataBase::IsUserFound(User& user), который делает проверку на наличие пользователя в базе данных, которая симулируется текстовым файлом. Во время возварата значения возникает исключение "нарушение доступа для чтения" в деструкторе класса User, перепробовал все что возможно, не могу понять в чем проблема, код класса Userи самого метода приведен ниже.

CPP-файл

User::User(string& name, string& pass, string& codeWord)
{
    _userName = name;
    _password = pass;
    _codeWord = codeWord;
    _counter++;
    _id = _counter;
}
User::User()
{
    _userName = "undefine";
    _password= "undefine";
    _codeWord = "undefine";
    _id = 0;
} 
int User::GetId()
{
    return _id;
}

H-файл

#pragma once
#include<iostream>
using namespace std;
class User
{
private:
    string _userName;
    string _password;
    string _codeWord;
    int _id;
    static int _counter;
public:
     User(string& name, string& pass,string& codeWord);
     User();
     int GetId();
};

Метод IsUserFound

bool DataBase::IsUserFound(User& user)
{
    fstream fn;
    fn.open("UsersDBFile.txt", fstream::app|fstream::in | fstream::out);
    User temp;
    while (fn.read((char*)&temp, sizeof(User)))
    {
        if (temp.GetId() == user.GetId())
        {
            fn.close();
            return true;
        }
    }
    fn.close();
    return false;
}

Ответы (0 шт):