Считывание строки с бинарного файла C++

Есть класс Primitive, в нем есть 1 поле - str(строка). Я выделяю динамичский двумерный масив объектов класса - arr, заполняю его любыми данными(буквально по пару символов) и записываю это все в бинарный файл ( это все реализовано в test.cpp ). Далее, в main.cpp я создаю аналогичный динамический двумерный массив - new_arr, дальшее считываю данные с того же бинарного файла в этот массив, далее просто вывожу его. Проблема в том, что выводит пустые строки. Подскажите, пожалуйста, как исправить проблему

ОС - linux

test.cpp

#include <iostream>
#include <fstream>
#include <cstring>

class Primitive
{
    private:

    std::string str;

    public:

    Primitive()
    {
        str = ' ';
    }

    friend std::istream& operator >>(std::istream& in, Primitive& prim);
    friend std::ostream& operator <<(std::ostream& out, Primitive& prim);

};

std::istream& operator >>(std::istream& in, Primitive& prim)
{
    in >> prim.str;

    return in;
}

std::ostream& operator <<(std::ostream& out, Primitive& prim)
{
    out << prim.str << std::endl;

    return out;
}   




static const int MAX_SIZE = 3;

void Task()
{
    Primitive** arr = new Primitive*[MAX_SIZE];
    for(int i = 0; i < MAX_SIZE; i++)
    {
        arr[i] = new Primitive[MAX_SIZE];
    }

    for(int i = 0; i < MAX_SIZE; i++)
    {
        for(int j = 0; j < MAX_SIZE; j++)
        {
            std::cin >> arr[i][j];
        }
    }


    std::ofstream file("~/avept/oop/college_op/file.bin", std::ios::binary);
    file.write((char*)(&arr), sizeof(arr));
    file.close();

    for(int i = 0; i < MAX_SIZE; i++)
    {
        delete[] arr[i];
    }

    delete[] arr;
}

main.cpp

#include "test.cpp"

int main()
{
    Task();

    Primitive** new_arr = new Primitive*[MAX_SIZE];

    for(int i = 0; i < MAX_SIZE; i++)
    {
        new_arr[i] = new Primitive[MAX_SIZE];
    }

    std::ifstream file("~/avept/oop/college_op/file.bin", std::ios::binary);
    file.write((char*)(&arr), sizeof(arr));
    file.close();

    for(int i = 0; i < MAX_SIZE; i++)
    {
        for(int j = 0; j < MAX_SIZE; j++)
        {
            std::cout << new_arr[i][j] << std::endl;
        }
    }

    for(int i = 0; i < MAX_SIZE; i++)
    {
        delete[] new_arr[i];
    }

    delete[] new_arr;

    return 0;
}

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

Автор решения: AlexGlebe

Запись в Task() :

...
std::ofstream file("file.bin", std::ios::binary);

for(int i = 0; i < MAX_SIZE; i++)
{
    for(int j = 0; j < MAX_SIZE; j++)
    {
        std::cin >> arr[i][j];
        file  <<  arr[i][j];
    }
}

file.close();
...

Чтение в main :

...
std::ifstream file("file.bin", std::ios::binary);

for(int i = 0; i < MAX_SIZE; i++)
{
    for(int j = 0; j < MAX_SIZE; j++)
    {
        file  >>  new_arr[i][j] ;
        // в строке уже есть '\n' не буду лишнее выводить
        std::cout << new_arr[i][j] /*<< std::endl*/;
    }
}

file.close();
...
→ Ссылка