为什么要用 shared_ptr<bool> 而不是直接删除任务?
// 取消方式
auto timer_id = timer.addTimer(100ms, [] { ... });
// 取消:标记为已取消
*timer_id = true;
为什么不能直接从优先队列删除?
std::priority_queue不提供按值删除的接口。- 即使可以,删除后要调整堆,$O(\log N)$。
惰性删除:标记任务为取消(*cancelled = true),到期检查时看到已取消就不执行。虽然任务还在队列里占空间,但避免了删除的开销。如果取消的任务不多,这完全可以接受。