thin_pointer<T>
What is a thin pointer?
A thin_pointer is a fancy pointer, but it comprises only an actual pointer. There is the option of storing more than one pointer: simply pass multiple types to the template. Also accepted are arrays of some type, which are converted by the implementation to arrays of the specified dimension, but of pointers to the element type. The grouping of multiple pointers into the same object reduces the memory footprint, as well as serialization size, since at most one pointer is added per thin_pointer instance.
A thin_pointer of a single type: use as a plain pointer to the single type.
A thin_pointer of multiple types: use std::get<> to select a pointer element (elements can also be arrays of pointers).
A thin_pointer of a single array: just index the thin_pointer to select the pointer array element directly.
Why thin_pointer?
The constructors and destructors register and unregister the object’s this pointer as holding n pointers. When serializing an object, the system will be able to query any stored pointers, and overwrite the serialization at the correct offset, effectively replacing the stored address (which might not be correct at time and place of deserialization) with the offset within the serialization where the object that was originally referenced will be serialized in its own right.
Types that are additionally used with vnew-expressions, are then known to be of a certain size. This means the integral collection of objects can be traced out: all pointers can be traversed which are in the region of an object’s size, recurse until complete graph is charted. See memcontour.