Если вы используете стандартный контейнер (такой как std::map
или std::set
), вам нужно беспокоиться о различных динамических распределениях: выделении внутренних структур данных контейнера и выделении ваших собственных данных, которые вы хотите сохранить в контейнер. Распределение внутренних структур данных может быть настроено с помощью собственного std :: allocator (я уверен, что вы сможете найти тот, который соответствует вашим потребностям, их достаточно). Выделение ваших собственных структур данных необходимо обрабатывать отдельно, чаще всего путем реализации специфических для типа операторов new
и delete
. У Скотта Мейерса есть хорошая статья об этом в одной из его книг.
Другим решением будет использование Boost.Intrusive, набора контейнеров, в котором все внутренние элементы данных, необходимые для контейнера, хранятся в ваших собственных структурах данных (поэтому они называются навязчивыми). Это избавляет вас от двух разных схем распределения, так как вам нужно беспокоиться только о собственном распределении данных.