lambda对一个local变量capture by value没有问题。问题在返回的coroutine被resume时,这个capture自身已经被析构掉了。所以这不是shared_ptr能避免的。
- 来自 水木社区APP v3.5.7
【 在 ziqin 的大作中提到: 】
: 你这个不是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, 肯定要出问题啊
--
FROM 116.169.6.*