[wx-dev] return of wxString::utf8_str()

Robert Roebling robert at roebling.de
Tue Jul 3 13:16:04 PDT 2007


Robert Roebling wrote:
> Vaclav Slavik wrote:
> > Vadim Zeitlin wrote:
> > > RR> I just saw code in the GNOME printing backend
> > > RR> that does this
> > > RR>
> > > RR> const char *utf8 = string.utf8_str();
> > > RR>
> > > RR> and it then uses utf8. How do we know that the string
> > > RR> isn't destroyed afterwards
> > >
> > >  It isn'tin UTF-8 build (where utf8_str() just returns the pointer
> > > to the internal representation) but it's definitely a bug in
> > > wchar_t Unicode build or ANSI build. 
> > 
> > No, it isn't, it's just Robert quoting single line of code out of 
> > context:
> > 
> > // FIXME-UTF8: wouldn't be needed if utf8_str() always returned a 
> > // buffer
> > #if wxUSE_UNICODE_UTF8
> >     const char *data = text.utf8_str();
> 
> I don't think it has anything to do with the context. The 
> wxString instance "text" above is not used anywhere after
> that line so the compiler *could* destroy it right there.
> In that case "data" would point to rubbish. As I said,
> the "text" object probably is destroyed later. 
> 
> The code above would work like this:
> 
> Foo( text.utf8_str() );  // correct
> 
> but it is like this:
> 
> const char *data = text.utf8_str()
> // text could be destroyed here
> Foo( data );             // not correct

Alright, I'm wrong. The destructor (of "text") is called at
the closing } whereas I thought it could be destroyed any
time after its last usage.

  Robert






More information about the wx-dev mailing list