Hardаллокаторы

Чем std::allocator и зачем нужен?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

std::allocator<T> — стандартный аллокатор, инкапсулирующий operator new/delete для контейнеров STL. Контейнеры параметризованы аллокатором.

// Контейнер с кастомным аллокатором
std::vector<int, MyAlloc<int>> v;

// std::pmr (C++17) — полиморфные аллокаторы в runtime
#include <memory_resource>
std::pmr::monotonic_buffer_resource mbr(buffer, sizeof(buffer));
std::pmr::vector<int> v2(&mbr);   // аллоцирует из buffer
  • Custom allocator: pool allocation, shared memory, tracking, debug;
  • С C++11 allocator_traits упростил требования — достаточно key-методы;
  • С C++17 std::pmr — один тип контейнера работает с разными ресурсами в runtime;
  • Аллокаторы — продвинутая тема, большинству кода достаточно std::allocator.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.