你这个不是lambda lifetime的问题吧
MyCoroutine my_coroutine(int a)
{
auto lambda = [a](this auto self) -> MyCoroutine { // <---- good
// auto lambda = [a]() -> MyCoroutine { // <---- bad
std::printf("%d\n", a);
co_return;
};
return lambda();
}
你这个my_coroutine()函数因为没有co_wait/co_return/co_yield,所以本身就是个普通函数,根本就不是coroutine,反而是里面的lambda用了co_return是一个coroutine。
你这个lambda capture了一个普通函数stack上的local variable, 肯定要出问题啊
【 在 allegro 的大作中提到: 】
: 如果lambda返回一个coroutine,并且这个lambda有capture,那一般会有lifetime issue。
: 当lambda被销毁后,它的capture list也没了。
: 所以当返回的coroutine被resume时候,就触发了use-after-free。
: ...................
--
FROM 115.193.191.*