我对传递给协程任务的临时对象的生命周期感到困惑。考虑这个例子:
cppcoro::task<> UseObject(Object const& object);
cppcoro::task<> CallUseObject() {
co_await UseObject(Object()); // is this valid?
}
如果这些函数返回空,那么传递给UseObject的Object()将在分号处被销毁(即在UseObject完成后)。但是,我不确定同样的规则是否适用于协程。通过引用将临时对象传递给协程是否安全?如果不是在分号处销毁,那么临时对象何时被销毁?此外,作为一个健全性检查,总是写下以下代码是否安全:
cppcoro::task<> CallUseObject() {
Object stayingalive;
co_await UseObject(stayingalive);
}
因为co_await
完成后staying_alive
会被销毁?
Object()
在语句结束时已经死了,但我可能是错的。协程似乎是“按值传递”的一个很好的选择。 - Guillaume Racicot