[vdr] Re: cString operator= with same buffer
Sascha Volkenandt
lists at magoa.net
Sun Nov 20 13:10:01 CET 2005
On Sunday 20 November 2005 12:35, Holger Brunn wrote:
> Sascha Volkenandt wrote:
> > Why would you want this, or better why should two cStrings point to the
> > same buffer?
>
> Thanks for your reply, after putting together an example, I found that my
> problem is rather a symptom.
> Look at this code:
>
> #include "tools.h"
>
> cString str=cString("hello world");
>
> void func(cString string)
> {
> str=string;
> }
>
> int main(int argc, char* argv[])
> {
> printf("%s\n", *str);
> func(str);
> printf("%s\n", *str);
> }
>
> The problem is that str and string in func point to the same buffer. And
> even without assinging string to str, the second printf receives a freed
> buffer, for cString's destructor will be called for string when func
> returns.
>
> Then apart from dealing with the same-buffer thing, shouldn't cString have
> a copy constructor to take care of duplicating the buffer for this case? Or
> is cString intended to be passed by reference only?
You're absolutely right, I didn't think of such a scenario first, Apart from
the fact that a call by const-reference would reduce overhead in this case,
there are similar situations where that doesn't apply.
I've stumbled over one recently, but I solved it by surrounding it because I
didn't think Klaus wanted to blow up the cString class any further. But now
that Klaus almost accepted it already, I think it's a very good idea to
implement a copy ctor :-).
Greetings,
Sascha
More information about the vdr
mailing list