23 General utilities library [utilities]

23.12 Memory resources [mem.res]

23.12.2 Class memory_­resource [mem.res.class]

23.12.2.2 memory_­resource private virtual member functions [mem.res.private]

virtual void* do_allocate(size_t bytes, size_t alignment) = 0;

Requires: alignment будет степенью двойки.

Returns: Производный класс должен реализовать эту функцию для возврата указателя на выделенный storage ([basic.stc.dynamic.deallocation]) размером не менее bytes. Возвращенное хранилище выравнивается по указанному выравниванию, если такое выравнивание поддерживается ([basic.align]); в противном случае он выравнивается по max_­align.

Throws: Реализация производного класса должна генерировать соответствующее исключение, если не может выделить память с запрошенным размером и выравниванием.

virtual void do_deallocate(void* p, size_t bytes, size_t alignment) = 0;

Requires: p должен быть возвращен из предыдущего обращения к allocate(bytes, alignment) ресурсу памяти, равному *this, и память в p еще не должна быть освобождена.

Effects: Производный класс должен реализовать эту функцию для удаления выделенной памяти.

Throws: Ничего такого.

virtual bool do_is_equal(const memory_resource& other) const noexcept = 0;

Returns: Производный класс должен реализовать эту функцию для возврата, true если память, выделенная из, this может быть освобождена, other и наоборот, в противном случае false. [ Note: Самый производный тип other может не соответствовать типу this. Для производного класса Dтипичная реализация этой функции немедленно вернет false if dynamic_­cast<const D*>(&other) == nullptr. ] end note