Есть цикл кода, в котором вызывается 1 функция с 2 разными аргументами - 15 с true и 5 с true.
Результат дебага - ступенчатый рост памяти процесса (ну это ожидаемо с векторами). Но память для векторов для указателей превышает 10Мб, когда указателей в векторе 5-15.
int typeallocator::setlistsize(size_t listsize, bool forced) {
if (listsize < iters.size()) {
if (forced) {
for (size_t i = iters.size(); i > listsize; i--) {
iters.back()->~iterator();
iters.pop_back();
}
return 0;
}
return -1;
}
for (size_t i = iters.size(); i < listsize; i++) {
iters.push_back(new iterator(typesize));
}
return 0;
}
вот деструктор итератора
iterator::~iterator() {
for (stream::stream* s : usedbystreams) {
s->killstream(0);
}
free(pointer);
usedbystreams.clear();
}
вот структура итератора
struct iterator {
iterator(size_t typesize);
~iterator();
uint64_t id = 0;
uint64_t type = 0;
bool isblocked = false;
void* pointer;
vector<stream::stream*> usedbystreams;
};
я пробовал как clear так и ~vector, чтобы каждый удаляемый элемент не занимал хоть какого-либо места после удаления, но что-то пошло не так...
Меньше чем за 500 циклов память стала под 20Мб для процесса.
Дебаг памяти показывает, что по каким-то причинам число итераторов растет, а то, что они существуют - говорит, что не был вызван их деструктор.