Если вы имеете в виду, что вам нужен отдельный счетчик для каждого типа контейнера, вы можете просто включить тип контейнера в качестве параметра шаблона и раскомментировать static size_t allocated
, так что это статическая переменная-член. Таким образом, для каждого типа контейнера будет создана отдельная переменная счетчика.
Если вы говорите, что вам нужен отдельный счетчик для каждого экземпляра контейнера, вам нужно сделать size_t allocated
нестатической переменной-членом. Проблема в том, что вам также понадобится какой-то хук, чтобы вы могли получить доступ к счетчику распределения снаружи каждого контейнера. Конструкция распределителя STL затрудняет это. Некоторые контейнеры STL имеют конструктор, который позволяет передавать экземпляр распределителя, но не все контейнеры поддерживают это. В контейнерах, которые поддерживают это, вы можете включить ссылку на некоторую глобальную карту в свой класс распределителя, а затем передать экземпляр своего распределителя конструктору каждого контейнера. Затем, когда вы вызываете accounting_allocator::allocate()
, распределитель запишет количество байтов, которые он выделил в глобальной карте. Тем не менее, я не вижу, как вы могли бы легко связать эту информацию с конкретным экземпляром контейнера, поскольку объект распределителя не знает, к какому контейнеру он принадлежит.
Честно говоря, если вы просто собираете отладочную информацию, вероятно, проще просто определить нестатический size_t allocated
, и accounting_allocator::allocate()
просто выводит статистику в файл или на стандартный вывод. В качестве альтернативы вы можете использовать инструмент профилирования памяти для платформы, на которой вы разрабатываете.