У меня есть приложение, в котором мне нужно сохранить некоторые данные, поэтому я подумал о сериализации объектов. Я нашел хороший пример Вот. Следуя этому, вот что я придумал:
std::stack <std::string> cards;
cards.push("King of Hearts");
std::ofstream ofs("<location>", std::ios::binary);
ofs.write((char *)&cards, sizeof(cards));
ofs.close();
Затем я пытаюсь прочитать данные:
std::stack<std::string> inp;
std::ifstream ifs("<same_location>", std::ios::binary);
ifs.read((char *)&inp, sizeof(inp));
Однако в последней строке происходит сбой приложения (по какой-то причине из-за моих настроек Qt я не могу отладить в данный момент). В чем может быть возможная ошибка, и как мне это исправить?
Краткий ответ: вы не можете сериализовать стек так же, как описано в статье. Я бы сказал, что вы можете сериализовать POD только таким способом. Проблема здесь в том, что данные, которые вы хотите записать, не хранятся постоянно в памяти и с помощью ofs.write((char *)&cards, sizeof(cards));
Вы не принимаете во внимание указатели на другие места в памяти.
Попробуйте этот эксперимент: почему размер (карточки) не меняется, когда вы добавляете в него все больше и больше данных?
Чтобы исправить эти проблемы, вы должны написать свои собственные операторы потока для сериализации в макете, который, как вы знаете, находится под вашим контролем.