Временные объекты уничтожаются в конце полного выражения, частью которого они являются.
Полное выражение - это выражение, которое не является подвыражением какого-либо другого выражения. Обычно это означает, что он заканчивается на ;
(или )
для if
, while
, switch
и т. Д.), Обозначая конец оператора. В вашем примере это конец вызова функции.
Обратите внимание, что вы можете продлить срок службы временных файлов, связав их со ссылкой const
. Это продлевает срок их службы до времени жизни ссылки:
MyClass getMyClass();
{
const MyClass& r = getMyClass(); // full expression ends here
...
} // object returned by getMyClass() is destroyed here
Если вы не планируете изменять возвращаемый объект, то это хороший способ сохранить вызов конструктора копирования (по сравнению с MyClass obj = getMyClass();
), если оптимизация возвращаемого значения не применялась. К сожалению, это не очень хорошо известно. (Я предполагаю, что семантика перемещения в C ++ 11 сделает его менее полезным.)