[ROOT] operator= in CINT has wrong default behavior

From: Ole Hansen (ole@jlab.org)
Date: Sun May 14 2000 - 05:39:53 MEST


Hi everyone,

I am having a problem with operator= and CINT. I have a simple
class that inherits from TNamed and has two protected data members, 
like so:

class THaRun : public TNamed {

protected:
  UInt_t      fNumber;       //Run number
  TString     fFilename;     //File name

public:
  THaRun();
  THaRun( UInt_t number, const char* filename );
  THaRun( UInt_t number, const char* filename, const char* description );
  virtual ~THaRun();
  ...
};

I don't provide an explicit operator= because default memberwise
assignment should be fine.

Now, under CINT I try this:

[1] THaRun r1(100,"/data/run100.dat","Run 100")
[2] THaRun r2
[3] r2 = r1
(class TNamed)139424976

Oops! If I now inspect the object r2, only the TNamed part has been copied
and the data members of the THaRun part are zero/empty.

If I compile these statements (Linux/egcs-1.1), it works as expected,
i.e. "r2 = r1" copies all data members of THaRun.

I am using ROOT 2.23/12 with CINT 5.14.25.

Is this a limitation of CINT?

Cheers,
Ole



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:25 MET