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