[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