背景

C++ 协程常见 bug 之一是对象在挂起后已经销毁,但恢复时仍被访问。

典型风险

  1. 捕获局部引用并跨 suspend 使用
  2. 返回协程句柄后调用方提前释放上下文
Task<void> foo() {
    std::string buf = "hello";
    co_await suspend_point();
    use(buf); // 若生命周期判断错,这里会出问题
}

总结

协程代码要像异步状态机一样审生命周期,别按同步函数直觉来读。


控制流变了,生命周期审计方式也必须跟着变。