The current ObjectPool implementation is inefficient because it allocates a wrapper object for every object stored in the pool. This could potentially double the number of dynamic memory allocations for small objects.
Instead we should rework the class to avoid this. E.g. storing a function pointer instead of the wrapper class.