Holger Brunn wrote:
I see, didn't think of this. So we either need also a check for equality of references or just forget about it completely, as both situations would be rather theoretical. So could we agree on
if(&String == this) return *this; if(s!=String.s) { free(s); } s = String.s ? strdup(String.s) : NULL;
This will avoid the memory leak you pointed out and beahve the way you would expect from an assignment operator?
What happens if someone was trying to remove the initial part of the string, e.g. something like:
cString hw("Hello World"); hw = strstr(*hw, " ")+1;
The two buffers wouldn't be equal, but freeing the input before the strdup would still be wrong. How about:
if(&String == this) return *this; const char *old = s; s = String.s ? strdup(String.s) : NULL; free(old);
Does this stll match your expected behaviour?
Jon