On 19/02/2014 16:16, Claudio Valderrama C. wrote: >> -----Original Message----- >> From: Adriano dos Santos Fernandes [mailto:adrian...@gmail.com] >> Sent: MiƩrcoles, 19 de Febrero de 2014 8:10 >> >> On 18/02/2014 19:26, Claudio Valderrama C. wrote: >>> Probable because the string created by >> QualifiedName.toString() goes out of scope before the >> contents can be copied. While it would be more tedious to >> use, I would prefer this function changed to >>> string toString(string& out) >>> >>> to ensure the result is written in "out" and not in a >> temporary object. >>> >> Then you need to change every routine that returns a string. >> >> The problem is not with this function. The problem is where >> is passing a >> c_str() of a temporary object. > Most objects return a string that's a data member. It doesn't matter if you > copy the result or use it directly, unless the object itself is destroyed: > > ptr = dbb->dbb_filename.c_str() > ptr = tdbb->getAttachment()->att_filename.c_str() > ptr = work->dfw_name.c_str() > ptr = itemInfo->name.c_str() > I can use the pointer in a code section until the object is destroyed or the > name is changed. I'm not saying that you can use the pointer forever, but at > least in a few lines of code after calling it. These are all data members, not functions.
> QualifiedName.toString() is different because it builds a temporary just to > return the result. The concatenated name doesn't exist inside QualifiedName, > so the result of c_str is invalid immediately. The simplest code causes a > failure > ptr = qualifiedName.toString().c_str() > > And as I said, with any function returning a string (not string&). You can still do callFunction(qualifiedName.toString().c_str()), the temporary will be destroyed at the end of the statement. The problem is with code that caches the char* value coming from a string. Adriano ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel