seastar::future<int> incr(int i) {
using namespace std::chrono_literals;
// Oops, the "&" below is wrong:
return seastar::sleep(10ms).then([&i] { return i + 1; });
}
i 是一个栈变量,incr ()函数立即返回,因此当延续最终运行时,incr ()返回很久之后,这个地址将包含不相关的内容。
所以一般使用seastar::lw_shared_ptr,以值捕获作为传递方式。也可以使用seastar::do_with(sta::move(obj),[](object obj){}); 的方式延长对象生命期,这样就可以以引用的方式进行捕获。