[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