Memory increase while using a TClonesArray of TObjString

dear all,

I have written a simple interface class (let’s call it MessageBuffer) which deals with a TClonesArray of TObjString objects. The two main methods are

which adds a TObjString object in the TClonesArray, and

which clears the TClonesArray.

To ensure that no memory leaks originate within the class I simply typed in ROOT (interactive)

MessageBuffer buf; while(1) { buf.AddMessage("a"); buf.ClearMessages(); }

but memory usage increases and I really don’t understand what’s wrong with this class.

here follows the code which is is rather simple.
do you have any hint?
thank you,
roberto

[code]#ifndef ALITOFMONITORMESSAGEBUFFER_H
#define ALITOFMONITORMESSAGEBUFFER_H

#include “TObject.h”
#include “TClonesArray.h”
#include “TObjString.h”

class AliTOFMonitorMessageBuffer :
public TObject
{

public:

AliTOFMonitorMessageBuffer(); // default constructor
virtual ~AliTOFMonitorMessageBuffer(); // default destructor

/* methods */
Int_t GetNumberOfMessages() const {return fBuffer.GetEntries();}; // get entries
const Char_t *GetMessage(Int_t i) const {return i < GetNumberOfMessages() ? ((TObjString *)fBuffer.At(i))->GetString() : (Char_t *)NULL;}; // get message
void AddMessage(const Char_t *m) {fBuffer[GetNumberOfMessages()] = new TObjString(m);}; // add message
void PrintMessages() const {for (Int_t i = 0; i < GetNumberOfMessages(); i++) printf("%s\n", GetMessage(i));}; // print messages
void ClearMessages() {fBuffer.Delete();}; // clear messages

private:

AliTOFMonitorMessageBuffer(const AliTOFMonitorMessageBuffer &source) {}; // copy constructor
AliTOFMonitorMessageBuffer &operator=(const AliTOFMonitorMessageBuffer &source) {return *this;}; // operator =

TClonesArray fBuffer; // buffer

ClassDef(AliTOFMonitorMessageBuffer, 1);

};

#endif /* ALITOFMONITORMESSAGEBUFFER_H */[/code]

[code]#include “AliTOFMonitorMessageBuffer.h”

ClassImp(AliTOFMonitorMessageBuffer);

//____________________________________________________________________________

AliTOFMonitorMessageBuffer::AliTOFMonitorMessageBuffer() :
fBuffer(“TObjString”)
{
/* default constructor */
fBuffer.SetOwner(kTRUE);
}

//____________________________________________________________________________

AliTOFMonitorMessageBuffer::~AliTOFMonitorMessageBuffer()
{
/* default destructor */
}
[/code]

Hi,

Usevoid AddMessage(const Char_t *m) { new (fBuffer[GetNumberOfMessages()]) TObjString(m);}; // add message

Cheers,
Philippe.