Я пытаюсь разработать внутреннюю механику простого встроенного приложения. В сеть поступают порции данных, которые необходимо доставить компонентам, определенным механизмом адресации. Несколько компонентов могут подписаться на один и тот же адрес. Я хочу разработать архитектуру, в которой входящие фрагменты инкапсулируются в объекты-оболочки, выделенные из пула памяти. Каждый компонент может удерживать обертки (и данные внутри них) столько, сколько им нужно, и он должен быть освобожден, когда все компоненты отпустят его. В это время он возвращается в пул и снова готов к размещению. Истощение бассейна не является проблемой.
Я планирую использовать эту реализацию пула памяти, которая удовлетворяет требованиям Allocator. Для автоматического уничтожения объектов-оболочек я планирую использовать std::shared_ptr
, поэтому, когда все компоненты освобождают обертку, она автоматически уничтожается, а использованная память возвращается в пул.
Чего я не понимаю, так это того, как эти две концепции могут сойтись. Если я выделю память из пула напрямую (вызвав allocate()
), это даст мне указатель на блок данных, что нормально, но как тогда deallocate()
будет вызываться автоматически? Или мне нужно использовать другой контейнер для моих объектов-оболочек, таких как std::list
, и передать ему распределитель пула памяти?