29 ms·
Unless your destructors do more than deallocation, in which case you will leak whatever other resource you're managing.
by mcguire 6y ago
Unless your destructors do more than deallocation, in which case you will leak whatever other resource you're managing.
- MaxBarraclough 6y agoA pool can invoke destructors when it is cleared. Might take a bit of overhead (if the pool is to support arbitrary classes), but you could retain the fast pointer-bump allocation.
- ShroudedNight 6y agoNot Rust, C++, but in case anybody wants an example: https://github.com/eclipse/omr/commit/fd99ca42fdbed76cc00e68a5931fcf5dc23a1d09 https://github.com/eclipse/omr/commit/fd99ca42fdbed76cc00e68... TR::Region is the slab allocator used by the JIT in OpenJ9/OMR. The linked commit adds functionality for calling destructors of arbitrary types allocated in the Region.
- MaxBarraclough 6y agoInteresting, thanks. Seems to require use of a common base class though, i.e. to use a class with this pool, you have to inherit from Destructable, or else create a subclass that does. Seems ugly. Perhaps that's the only way it can be done in C++ though.
- projektfu 6y agoIt does create an object with that base class for the allocator but returns an object of the type you want from the allocator, using a template (Region::Instance<T>). So the API user only sees the types it's interested in.