[Aptitude-devel] Stepping down as maintainer/developer

Jö Fahlke jorrit at jorrit.de
Wed Mar 14 20:49:55 UTC 2012


Am Fri,  2. Mar 2012, 23:27:33 +0800 schrieb Daniel Hartwig:
> On 2 March 2012 22:26, Jens Seidel <jensseidel at users.sf.net> wrote:
> > +      return theme_config->FindVector((themeroot+Name).c_str());
> 
> That is certainly an issue to be aware of.  In this case it is safe to
> call FindVector like this as the temporary string will remain allocated
> until the function returns.
> 
> I have been using such temporaries extensively in recent changes.  I
> did have the same concern as yourself when I started so I checked this
> out with a small test program first and found some confirmation[1]
> online (though did not manage to locate anything in C++ reference).
> 
> [1] http://stackoverflow.com/questions/7581680/pass-c-str-return-value-of-temporary-object-to-printf

Such tests are are useful but should be taken with a grain of salt, since they
can succeed when you actually have undefined behaviour (e.g. use after free).

According to the standard[1] (§12.2 paragraph 3) you should be OK provided
FindVector() doesn't store a reference or pointer into its argument string
somewhere (e.g. in its return value).  Guessing from the name of the function
it just returns are reference into the container *theme_config, so there
shouldn't be a problem.

The basic rule is that the lifetime of a temporary extends until the execution
of the full-expression ends.  In this case this means until the end of
"theme_config->FindVector((themeroot+Name).c_str())".  Of course, every basic
rule has exceptions (see §12.2 paragraphs 4 and 5), but I dont think they
apply here.

Bye,
Jö.

[1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf
    Latest freely accessible draft...

-- 
Jorrit (Jö) Fahlke, Interdisciplinary Center for Scientific Computing,
Heidelberg University, Im Neuenheimer Feld 368, D-69120 Heidelberg
Tel: +49 6221 54 8890 Fax: +49 6221 54 8884

If you receive something that says "Send this to everyone you know,"
pretend you don't know me.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 828 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/aptitude-devel/attachments/20120314/87362566/attachment.pgp>


More information about the Aptitude-devel mailing list