问题
Possible Duplicate:
C++: Life span of temporary arguments?
It is said that temporary variables are destroyed as the last step in evaluating the full-expression, e.g.
bar( foo().c_str() );
temporary pointer lives until bar returns, but what for the
baz( bar( foo().c_str() ) );
is it still lives until bar returns, or baz return means full-expression end here, compilers I checked destruct objects after baz returns, but can I rely on that?
回答1:
Temporaries life until the end of the full expression in which they are created. A "full expression" is an expression that's not a sub-expression of another expression.
In baz(bar(...));
, bar(...)
is a subexpression of baz(...)
, while baz(...)
is not a subexpression of anything. Therefore, baz(...)
is the full expression, and all temporaries created during the evaluation of this expression will not be deleted until after baz(...)
returned.
回答2:
As the name suggests, the full-expression is all of the expression, including the call to baz()
, and so the temporary will live until the call to baz()
returns.
来源:https://stackoverflow.com/questions/5459759/full-expression-boundaries-and-lifetime-of-temporaries