Шаг 556.
Библиотека STL.
Распределители памяти. Временные буферы

    На этом шаге мы рассмотрим функции, позволяюще организовать кратковременное хранение информации в неинициализированной памяти.

    Функции 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() слишком сложны для написания безопасного с точки зрения исключений кода, поэтому обычно они не встречаются в библиотечных реализациях.

    На следующем шаге мы рассмотрим распределитель по умолчанию.




Предыдущий шаг Содержание Следующий шаг