1. 使用timer时timer析构会导致定时器回调提前被触发
错误例子:
// 错误案例:
{
asio::steady_timer timer(io_ctx);
timer.expires_from_now(10s);
timer.async_wait([](){
// Do your stuff.
});
} // timer出了这里就会被析构,析构函数中会提前执行callback逻辑.
改进后:
auto timer = std::make_shared<asio::steady_timer>(*io_ctx_);
timer->expires_from_now(timeout);
timer->async_wait([timer /* Avoid timer dead. */](const asio::error_code& ignored) {
// Do your stuff.
});