Я запутался в жизни временников, переданных на сопрограммы. Рассмотрим этот пример:
cppcoro::task<> UseObject(Object const& object);
cppcoro::task<> CallUseObject() {
co_await UseObject(Object()); // is this valid?
}
Если бы это были функции, возвращающие void, то Object()
, переданный UseObject
, будет уничтожен в точке с запятой (т.е. после завершения UseObject
). Однако я не уверен, относится ли это к сопрограммам. Безопасно ли передавать временное в рутину по ссылке? Когда временные уничтожаются, если это не точка с запятой?
Кроме того, для проверки работоспособности всегда можно написать:
cppcoro::task<> CallUseObject() {
Object stayingalive;
co_await UseObject(stayingalive);
}
поскольку staying_alive
уничтожается после того, как co_await завершает работу?