Re: cString operator= with same buffer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Media]     [Asterisk]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Big List of Linux Books]     [Fedora Users]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux