Если не считать этого фатального недостатка, то в целом pmr может быть иногда довольно полезен.
monotonic_buffer_resource же при этом абсолютно бесполезен на уровне дизайна.Идейно кажется довольно удобной абстракцией -- непрерывная память, которая запинена.
Реализация представляет из себя связный список блоков, размер блоков растет экспоненциально.
Но может ли кто-то объяснить почему у нее нет методов:
1)
clear -- отпустить все блоки кроме последнего, для последнего считать, что он пустой2)
current_block_size/next_block_size/size, хотя бы что-тоНеобходимость первого метода довольно очевидна, так же как наличие такого метода для вектора.
Необходимость же второго обусловлена тем, что иногда хочется освободить всю память (в отличие от clear), но при этом при следующем использовании начать сразу с нужного размера. И это как раз возможно, конструктор от размера есть у этого ресурса, а вот его размер нужно трекать снаружи почему то :(
Пример для
clear:... our_resource;
vector<T1> v1({our_resource});
use(v1);
v1 = {};
our_resource.clear()
vector<T2> v2({our_resource});
use(v2);