C++0x аллокаторы

Я заметил, что моя копия 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
6
задан Mooing Duck 30 August 2011 в 22:34
поделиться