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]