Исключение "нарушение доступа для чтения" в методе 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;
}