Re[2]: DLL и выделение памяти
От: rus blood Россия  
Дата: 09.12.04 09:29
Оценка:
Здравствуйте, dlgv, Вы писали:

D>Спасибо за ответы!!! Да, если выделять и освобождать память в одном модуле,то все OK. Так и поступил


template <class T>
class allocator
{
    typedef void* (__cdecl* malloc_t)(size_t);
    typedef void (__cdecl* free_t)(void*);
public:
    typedef T            value_type;
    typedef T*            pointer;
    typedef const T*    const_pointer;
    typedef T&            reference;
    typedef const T&    const_reference;
    typedef size_t        size_type;
    typedef ptrdiff_t    difference_type;

public:
    allocator() : 
        m_pfMalloc(&malloc), m_pfFree(&free) 
            {}
    allocator(const allocator<T>& _all) : 
        m_pfMalloc(_all.m_pfMalloc), m_pfFree(_all.m_pfFree) 
            {}
    template <class R>
    allocator(const allocator<R>& _all) : 
        m_pfMalloc(_all.m_pfMalloc), m_pfFree(_all.m_pfFree) 
            {}

    pointer adddress(reference _val) const
        { return &_val; }
    const_pointer address(const_reference _val) const
        { return &_val; }

    pointer allocate(size_type _size)
        { return (pointer)m_pfMalloc(_size); }
    template <class R>
    pointer allocate(size_type _size, const R*)
        { return (pointer)m_pfMalloc(_size); }

    void construct(pointer _ptr, const T& _val)
        { new((void*)_ptr) T(_val); }

    void deallocate(pointer _ptr, size_type)
        { m_pfFree(_ptr); }

    void destroy(pointer _ptr)
        { _ptr->~T(); }

    size_type max_size() const
        { return (size_type)(-1) / sizeof (T); }

    template<class R>
    struct rebind 
    {
        typedef allocator<R> other;
    };
    
public:
    malloc_t    m_pfMalloc;
    free_t        m_pfFree;
};
Имею скафандр — готов путешествовать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.