Я заметил, что моя копия 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