Re[3]: Время разрушения фактических параметров
От: remark Россия http://www.1024cores.net/
Дата: 28.03.10 12:09
Оценка:
Здравствуйте, 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



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.