Hi All, sorry for the lenghty message that follows. I could not make it any shorter. Ok, I am playing with singletons and I have the following implementation rtest.h ---------------------------------------------------------------------- #include "TObject.h" #include <stdio.h> class AliSingleton : public TObject { private: static AliSingleton* fInstance; Int_t fData; protected: AliSingleton() {printf("Singleton creator called\n");} public: static AliSingleton* Instance() { if(!fInstance) fInstance = new AliSingleton; // fInstance->Data()=101; return fInstance; } virtual ~AliSingleton() { printf("Singleton distructor called %p\n",fInstance); } Int_t& Data() { return fData;} void SetData(Int_t i) { fData=i;} ClassDef (AliSingleton,1) }; rtest.cxx -------------------------------------------------------------------- #include "rtest.h" AliSingleton* AliSingleton::fInstance=0; ClassImp(AliSingleton) Nothing to be very proud of... Now I have the following main program #include <TROOT.h> #include <TFile.h> #include "rtest.h" TROOT root("TROOT","Application"); int main () { printf("Setting data\n"); AliSingleton::Instance()->Data()=101; printf("data = %d\n",AliSingleton::Instance()->Data()); AliSingleton::Instance()->SetData(99); printf("data = %d\n",AliSingleton::Instance()->Data()); AliSingleton::Instance()->SetData(98); printf("data = %d\n",AliSingleton::Instance()->Data()); } which gives the following result Setting data Singleton creator called data = 101 data = 99 data = 98 If I run the program as a macro instead, I get Setting data Singleton creator called data = 0 data = 99 data = 98 That is the statement AliSingleton::Instance()->Data()=101; is not obeyed in the macro. Any idea? Thanks, Federico Carminati
This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:43 MET