Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


struct NullAllocator;
NullAllocator is an emphatically empty implementation of the allocator interface. Although it has no direct use, it is useful as a "terminator" in composite allocators.
enum uint alignment;
NullAllocator advertises a relatively large alignment equal to 64 KB. This is because NullAllocator never actually needs to honor this alignment and because composite allocators using NullAllocator shouldn't be unnecessarily constrained.
shared pure nothrow @nogc @safe void[] allocate(size_t);
Always returns null.
shared pure nothrow @nogc @safe void[] alignedAllocate(size_t, uint);
Always returns null.
shared pure nothrow @nogc @safe void[] allocateAll();
Always returns null.
shared pure nothrow @nogc @safe bool expand(ref void[] b, size_t s);

shared pure nothrow @nogc @safe bool reallocate(ref void[] b, size_t);

shared pure nothrow @nogc @safe bool alignedReallocate(ref void[] b, size_t, uint);
These methods return false.

Precondition b is null. This is because there is no other possible legitimate input.

shared const pure nothrow @nogc @safe Ternary owns(const void[]);
shared const pure nothrow @nogc @safe Ternary resolveInternalPointer(const void*, ref void[]);
shared pure nothrow @nogc @safe bool deallocate(void[] b);

Precondition b is null

shared pure nothrow @nogc @safe bool deallocateAll();
shared const pure nothrow @nogc @safe Ternary empty();
Returns Ternary.yes.
static shared NullAllocator instance;
Returns the shared global instance of the NullAllocator.