Здравствуйте, Went, Вы писали:
R>>Да, можешь быть уверен. Временные объекты рушатся в конце т.н. full expression (грубо говоря, там, где стоит ";").
W>Спасибо. Хорошо, что стандартизировано, хотя, мне кажется, что было бы логичнее разрушать их по сразу выходу из функции, не дожидаясь конца выражения.
А смысл? Так ими можно воспользоваться несколько раз:
X const& foo(X const& x)
{
cout << x.data++;
return x;
}
int main()
{
foo(foo(foo(X())));
}
Или даже ещё лучше пример будет:
X const& init(X const&)
{
const_cast<X&>(x).data = rand();
}
void foo(X const& x1, X const X2);
int main()
{
foo(init(X()), init(X()));
}
В общем соль в том, что на этот объект могут быть ссылки после вызова функции, даже если он и временный.
Или даже ещё лучше пример:
lock(x), x->foo();
или:
lock(x)->f();
Смотри:
http://rsdn.ru/forum/cpp/2937445.1.aspxАвтор: remark
Дата: 04.05.08