This improvement adds the following two functions to the list of functions generated per pooled type:
typedef ... <typename>_sp;
void set_safe_ptr(<typename> *p, <typename>_sp *sp);
<typename> *safe_deref_<typename>(<typename>_sp sp);
A user of this feature can declare or allocate a safe-pointer, set the safe-pointer using a normal object pointer, and dereference the safe-pointer later to yield the original normal pointer. If, in the interim time, the object was freed, the safe-dereference will yield a NULL pointer rather than a stale (possibly re-used) pointer.