Hi Jeff,
>
> if i have
>
> TLorentzVector *v1, *v2;
> TLorentzVector v3, v4;
>
> // do something to give values to v1 and v3 ...
>
> v2 = v1;
> v4 = v3;
> *v2 = *v1;
>
> are these assignments all doing the same thing? I might suspect that
> the first one makes v2 point to the same object to which v1 is
> momentarily pointing.
you are right
> However the second assignment would appear to
> depend on C++'s semantics for shallow vs. deep copies, as would the
> third form, and I would not know whether to expect the second and
> third forms to be equivalent.
The second and the third are equivalent, they use the operater=
of TLorentzVector. If you don't implement one C++ provides one with
shallow copy sematics. In TLorentzVector there is one implemented
with deep copy semantics.
>
> I don't know how to interpret:
>
> TLorentzVector& operator=(const TLorentzVector& q)
>
for the argument (const TLorentzVector& q) see Lipmann (3rd edition) p 341
last paragraph: reference arguments to avoid copying objects, const to
signal the compiler that you do not chage the argument.
At first you may think that void operator=(..) would be ok, because
v3 = v4 would be resolved as v3.operator=(v4), but in C++ such constructs
return a reference to the result to allow eg
if ( v3 == (v4 = *v1) ) ...
Therefore it seems resonable to mimic that behavior.
see Lipman (3rd edition) p729-732 or 751-754
Peter
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:19 MET