Constructs a pool resource object that will obtain memory from upstream
whenever the pool resource is unable to satisfy a memory request
from its own internal data structures.
The resulting object will hold a copy of upstream
but will not own the resource to which upstream
The intention is that calls to upstream->allocate()
will be substantially fewer than calls to this->allocate()
in most cases.
— end note
The behavior of the pooling mechanism is tuned
according to the value of the opts