На этом шаге мы рассмотрим функции, позволяюще организовать кратковременное хранение информации в неинициализированной памяти.
Функции get_temporary_buffer() и return_ternporary_buffer() работают с неинициализированной памятью, предназначенной для краткосрочного использования внутри функции. Учтите, что функция get_temporary_buffer() может вернуть меньше памяти, чем ожидалось, поэтому она возвращает пару из адреса и размера памяти (в элементах). Пример использования этой функции:
void f() { // Выделение памяти для num элементов типа MyType pair<MyType*,std::ptrdiff_t> p = get_temporary_buffer<MyType>(num); if (p.second == 0) { // Выделить память для элементов вообще не удалось ... } else if (p.second < num) { // Не удалось выделить достаточно памяти для num элементов. // Однако и эту память нужно освободить! ... } // Обработка ... // Освобождение временной выделенной памяти if (p.first != 0) { return_temporary_buffer(p.first); } }
Функции get_temporary_buffer() и return_temporary_buffer() слишком сложны для написания безопасного с точки зрения исключений кода, поэтому обычно они не встречаются в библиотечных реализациях.
На следующем шаге мы рассмотрим распределитель по умолчанию.