ev-drogon-lambda-cache-timeout-003¶
| 字段 | 值 |
|---|---|
| 项目 | drogonframework/drogon |
| 固定 commit | 3aae769cc405 |
| 路径 | lib/inc/drogon/CacheMap.h |
| 行段 | L528-L541 |
| 特性 | lambda 表达式 |
| 许可证 | MIT |
| 代码来源 | 项目源码 |
| 级别 | manual |
| 审核 | zyuhao7 @ 2026-10-27 |
| 测试代码 | 否 |
| 发现方式 | manual |
用法¶
用值捕获 key 的 lambda 构造超时回调
为什么典型¶
回调生命周期长于当前调用,按值捕获 key 避免悬空引用,再移交 std::function。
摘录¶
std::function<void()> cb = [this, key]() {
bool erased{false};
std::function<void()> timeoutCallback;
{
std::lock_guard<std::mutex> lock(mtx_);
auto iter = map_.find(key);
if (iter != map_.end())
{
auto &value = iter->second;
auto entryPtr = value.weakEntryPtr_.lock();
// entryPtr is used to avoid race conditions
if (value.timeout_ > 0 && !entryPtr)
{
erased = true;
备注¶
生产路径;捕获列表显式列出 this 与 key,体现生命周期边界。