Reading and writing objects from/to binary files
In the previous recipe, we learned how to write and read raw data (that is, unstructured data) to and from a file. Many times, however, we must persist and load objects instead. Writing and reading in the manner shown in the previous recipe works for POD types only. For anything else, we must explicitly decide what is actually written or read, since writing or reading pointers, virtual tables (vtables), and any sort of metadata is not only irrelevant but also semantically wrong. These operations are commonly referred to as serialization and deserialization. In this recipe, we will learn how to serialize and deserialize both POD and non-POD types to and from binary files.
Getting ready
For the examples in this recipe, we will use the foo
and foopod
classes, as follows:
class foo
{
int i;
char c;
std::string s;
public:
foo(int const i = 0, char const c = 0, std::string const & s = {}):
i(i), c(c), s(s...