lifetime management of these objects by shared pointers is not always feasible; at least it is not always doable without awful hacks.