Я предполагаю, что объект, выпущенный из ptr_set
, просочился, если он не был удален вручную.Однако в приведенной ниже тестовой программе показаны только 2 утечки в valgrind (из строк 9/13), а в строке 12 нет утечек. Я неправильно понял release
или ptr_container
удалось как-то очистить?
#include <iostream>
#include <boost/ptr_container/ptr_set.hpp>
typedef boost::ptr_set<int> SetInt;
int main() {
SetInt s;
new int(1); // leak, reported by valgrind
s.insert(new int(2));
s.insert(new int(3)); // leak? not reported by valgrind
s.insert(new int(4)); // leak, reported by valgrind
s.erase(s.begin());
s.release(s.begin()); // release '3'
SetInt::auto_type old_int1 = s.release(s.begin());
int *old_int2 = old_int1.release();
std::cout << '\'' << *old_int2 << "' has been released\n";
}
Выход:
'4' has been released