对,这是错误代码。
正确的搞法是让important_call()自己返回
important_call(your_lambda, deadline);
这样只要important_call()保证返回之用不再使用这个lambda即可。
【 在 bihai (new half life) 的大作中提到: 】
: 标 题: 关于lambda俘获变量的生命周期的问题
: 发信站: 水木社区 (Wed Oct 27 11:30:59 2021), 站内
:
: 如果有一函数,经常被调用,里面有一个变量,需要进行一个操作,假定这个操作是异步的,是网络方面进行回叫。
:
: int foo(.) {
: int value = 0;
: var waiter=...
: important_call([&waiter, &value](int update){
: // when call back, will destruct waiter
: value = update;
: waiter.Cancel();
: }
: waiter.Wait(deadline);
: return value;
: }
:
: 那么,如果超时后,函数返回了0,然后lambda才被呼叫,这个时候waiter已经消失了,是不是?
: --
: ※ 修改:·bihai 于 Oct 27 11:43:13 2021 修改本文·[FROM: 98.42.143.*]
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 98.42.143.*]
--
修改:bihai FROM 98.42.143.*
FROM 73.15.185.*