Да, классы и структуры будут иметь одну и ту же компоновку в памяти при каждом запуске вашей программы. Хотя я не могу сказать, соблюдает ли это стандарт. Машинный код, сгенерированный компиляторами C ++, использует «жестко запрограммированные» смещения для доступа к полям типов, поэтому они являются фиксированными. Реально макет изменится только в том случае, если вы измените определение класса C ++ (размеры полей, порядок, виртуальные методы и т. Д.), Скомпилируете с другим компилятором или измените параметры компилятора.
Пока тип является POD и без полей указателя, было бы безопасно просто сбросить его в файл и прочитать обратно с той же самой программой. Однако из-за вышеупомянутых проблем этот подход довольно негибкий в отношении версионности и совместимости.
[править]
Чтобы ответить на собственное изменение, не делайте этого с вашим объектом "Игра"! Он, безусловно, имеет указатели на другие объекты, и эти объекты больше не будут существовать в памяти или будут где-то еще, когда вы перезагрузите свой файл.