Я повторю "ты не должен этого делать". Если вы напечатаете sizeof(myc)
в приведенном выше коде, это, вероятно, 4, как и следовало ожидать ... НО попробуйте изменить чтение и запись на виртуальные. Когда я это сделал, он печатает размер как 16. Эти 12 байтов являются внутренними внутренностями с чувствительными значениями & mdash; сохранение их и последующее чтение обратно будет похоже на то, что значение указателя будет все еще хорошим, если вы его написали и загрузили это снова.
Если вы хотите обойти сериализацию и отобразить память объекта C ++ непосредственно на диск, есть способы взломать это. Но правила вовлечены, и это не для слабонервных. См. POST ++ (Постоянное хранилище объектов для C ++) в качестве примера.
Я добавлю, что вы не проверяли статус fail()
или eof()
. Если бы вы знали, вы неправильно используете API fstream. Попробуйте еще раз с:
void read(ifstream *in) {
in->read((char *) this, sizeof(myc));
if (in->fail())
cout << "read failed" << endl;
}
void write(ofstream *out){
out->write((char *) this, sizeof(myc));
if (out->fail())
cout << "write failed" << endl;
}
... и посмотрим, что произойдет.