Я заметил, что моя копия MSVC10 поставлялась с контейнерами, которые, казалось, позволяли использовать аллокаторы на основе состояния, и написал простой аллокатор пулов, который распределяет пулы для определенного типа.
Однако, я обнаружил, что если _ITERATOR_DEBUG_LEVEL != 0
вектор MSVC создает аллокатор прокси из переданного аллокатора (для отслеживания итераторов?), использует прокси, затем позволяет прокси выпасть из области видимости, ожидая, что выделенная память останется. Это вызывает проблемы, так как мой аллокатор пытается освободить его пул при уничтожении. Разрешено ли это стандартом C++0x?
Код примерно такой:
class _Container_proxy{};
template<class T, class _Alloc>
class vector {
_Alloc _Alval;
public:
vector() {
// construct _Alloc<_Container_proxy> _Alproxy
typename _Alloc::template rebind<_Container_proxy>::other
_Alproxy(_Alval);
//allocate
this->_Myproxy = _Alproxy.allocate(1);
/*other stuff, but no deallocation*/
} //_Alproxy goes out of scope
~_Vector_val() { // destroy proxy
// construct _Alloc<_Container_proxy> _Alproxy
typename _Alloc::template rebind<_Container_proxy>::other
_Alproxy(_Alval);
/*stuff, but no allocation*/
_Alproxy.deallocate(this->_Myproxy, 1);
} //_Alproxy goes out of scope again