1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

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