template <typename T> std::pmr::vector<T>
- это псевдоним для template <typename T> std::vector<T, std::pmr::polymorphic_allocator<T>>
. Различия во времени выполнения только заключаются в том, как он выделяет и освобождает память для элементов.
Преимущество std::pmr::vector
заключается в том, что разные стратегии распределения не имеют разных типов, поэтому вы можете иметь один функция void frobnicate(const std::pmr::vector<int> &);
, вместо несколько template <typename A> void frobnicate(const std::vector<int, A> &);
, если разные части вашей программы имеют разные требования к распределению.
Недостаток есть (обычно) некоторые накладные расходы на стирание типа.
Если вы используете только один распределитель (например, по умолчанию, std::allocator
), нет смысла использовать std::pmr