VAPoolObject Smart Pointer
Adapt the VAPoolObject(Factory) to use smart pointer for its API. With this, it would be easier to use the objects form the pool since the references would not have to be incremented/decremented.
It might be possible to implement this via the custom destructors for std::shared_ptr, see here and for an example here. Otherwise, a custom pool smart pointer might be necessary that automatically counts its references.
However, it might be necessary to implement a version with owning an non-owning pointers.