Hi Federico,
The problem is in misinterpretation
of the scope operator by cint;
if you do:
root [6] AliSingleton* s = AliSingleton::Instance()
root [7] s->Data()=5
root [8] AliSingleton::Instance()->Data()
AliSingleton::Instance called.
(Int_t)5
the data fData are modified as you wish
but
root [17] AliSingleton::Instance()->Data()=8
root [18] AliSingleton::Instance()->Data()
AliSingleton::Instance called.
(Int_t)5
does not change the data.
I guess this is a task for Masaharu.
Regards,
Ivana
==============================================================
e-mail: Ivana.Hrivnacova@cern.ch
address: PPE Division; 160-1-016; CERN; 1211 Geneve; Switzerland
phone: (022)-767-9749
Home institute: NPI Rez near Prague, Czech Republic
==============================================================
On Wed, 1 Dec 1999, Federico Carminati wrote:
> 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