std.experimental.allocator.building_blocks.scoped_allocator
- struct ScopedAllocator(ParentAllocator);
-
ScopedAllocatordelegates all allocation requests toParentAllocator. When destroyed, theScopedAllocatorobject automatically callsdeallocatefor all memory allocated through its lifetime. (ThedeallocateAllfunction is also implemented with the same semantics.)deallocateis also supported, which is where most implementation effort and overhead ofScopedAllocatorgo. Ifdeallocateis not needed, a simpler design combiningAllocatorListwithRegionis recommended.- Examples:
-
import std.experimental.allocator.mallocator : Mallocator; import std.typecons : Ternary; ScopedAllocator!Mallocator alloc; writeln(alloc.empty); // Ternary.yes const b = alloc.allocate(10); writeln(b.length); // 10 writeln(alloc.empty); // Ternary.no
- Allocator parent;
-
If
ParentAllocatoris stateful,parentis a property giving access to anAffixAllocator!ParentAllocator. Otherwise,parentis an alias forAffixAllocator!ParentAllocator.instance. - enum auto alignment;
-
Alignment offered
- size_t goodAllocSize(size_t n);
-
Forwards to
parent.goodAllocSize(which accounts for the management overhead). - void[] allocate(size_t n);
-
Allocates memory. For management it actually allocates extra memory from the parent.
- bool expand(ref void[] b, size_t delta);
-
Forwards to
parent.expand(b, delta). - bool reallocate(ref void[] b, size_t s);
-
Reallocates
bto new sizes. - Ternary owns(void[] b);
-
Forwards to
parent.owns(b). - bool deallocate(void[] b);
-
Deallocates
b. - bool deallocateAll();
-
Deallocates all memory allocated.
- const pure nothrow @nogc @safe Ternary empty();
-
Returns
Ternary.yesif this allocator is not responsible for any memory,Ternary.nootherwise. (Never returnsTernary.unknown.)
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_experimental_allocator_building_blocks_scoped_allocator.html