Не могу записать объект класса с вектором в бинарный файл

Надо записать объект класса, внутри которого содержится вектор целых чисел. У меня получается записать отдельно вектор, но это не то, что мне нужно. Надо записать целый объект. Компилируется всё хорошо, но программа выдает ошибку "Access violation reading location". Вот мой код:

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

class foo
{
    string name;
    vector<int> arr;
public:
    foo() {}
    foo(string name)
    {
        this->name = name;
    }
    vector<int>& getVector()
    {
        return arr;
    }
    int operator[](const int index)
    {
        if (index < arr.size())
        {
            return arr[index];
        }
        return -1;
    }
    void setName(string name)
    {
        this->name = name;
    }
    string getName()
    {
        return this->name;
    }
};

int main()
{
    foo a("qwerty");

    fstream fout("qwe", ios::binary | ios::out);

    for (int i = 0; i < 5; i++)
    {
        a.getVector().push_back(i);
    }

    if (fout)
    {
        string name1 = "name";
        int name1_size = sizeof(name1);
        int vector1_size = a.getVector().size();
        fout.write(reinterpret_cast<char*>(&name1_size), sizeof(int));
        fout.write(reinterpret_cast<char*>(&name1), name1_size);
        fout.write(reinterpret_cast<char*>(&vector1_size), sizeof(int));
        fout.write(reinterpret_cast<char*>(a.getVector().data()), sizeof(int) * vector1_size);
        fout.close();
    }

    foo b;

    fstream fin("qwe", ios::binary | ios::in);

    if (fin)
    {
        string name2;
        int name2_size;
        int vector2_size;
        fin.read(reinterpret_cast<char*>(&name2_size), sizeof(int));
        fin.read(reinterpret_cast<char*>(&name2), name2_size);
        b.setName(name2);

        fin.read(reinterpret_cast<char*>(&vector2_size), sizeof(int));
        b.getVector().resize(vector2_size);
        fin.read(reinterpret_cast<char*>(b.getVector().data()), sizeof(int) * vector2_size);

        fin.close();
    }

    return 0;
}

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