背景
C++ 协程常见 bug 之一是对象在挂起后已经销毁,但恢复时仍被访问。
典型风险
- 捕获局部引用并跨 suspend 使用
- 返回协程句柄后调用方提前释放上下文
Task<void> foo() {
std::string buf = "hello";
co_await suspend_point();
use(buf); // 若生命周期判断错,这里会出问题
}
总结
协程代码要像异步状态机一样审生命周期,别按同步函数直觉来读。
控制流变了,生命周期审计方式也必须跟着变。