How can i overload the new operator in template class?

Discussion in 'C' started by ssedbe, Sep 1, 2012.

  1. ssedbe

    ssedbe New Member

    Joined:
    Sep 1, 2012
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    I tried to overload the new operator in the template class below to use malloc instead of new, but I wasn't successful.

    Code:
    template< int SIZE >
    class MemPoolT : public MemPool
    {
    public:
    MemPoolT() : root(0), currentAllocs(0), nAllocs(0), maxAllocs(0) {}
    ~MemPoolT()
    {
    for( int i=0; i<blockPtrs.Size(); ++i ) {
    delete blockPtrs[i];
    }
    }
    virtual void* Alloc() 
    {
    if ( !root ) {
        // Need a new block.
         Block* block = new Block();
         blockPtrs.Push( block );
         for( int i=0; i<COUNT-1; ++i ) {
             block->chunk[i].next = &block->chunk[i+1];
        }
         block->chunk[COUNT-1].next = 0;
         root = block->chunk;
    }
    void* result = root;
    root = root->next;
    ++currentAllocs;
    if ( currentAllocs > maxAllocs ) maxAllocs = currentAllocs;
    nAllocs++;
    return result;
    }
    private:
    enum { COUNT = 1024/SIZE };
    union Chunk {
        Chunk* next;
        char mem[SIZE];
    };
    struct Block {
        Chunk chunk[COUNT];
    };
    Chunk* root;
    int currentAllocs;
    int nAllocs;
    int maxAllocs;
    };
    How can I do this?
     
    Last edited by a moderator: Sep 1, 2012

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice