std::function与copyable_function互转的陷阱
Interconverting std::function with copyable_function

C++26 引入了 std::copyable_function 以修复 std::function 的设计缺陷,但在实际互转时却暗藏玄机。我在测试中发现,当代码库中混用这两种类型时,libstdc++ 的实现会导致每次转换都在堆上分配新对象,形成越来越长的调用链。这不仅造成性能随迭代次数线性下降,还引发了严重的逻辑内存泄漏。即便在看似无害的更新循环中,调用延迟也会从微秒级飙升至毫秒级。这提醒我们,在迁移到 C++26 新特性时,必须警惕新旧类型混用带来的隐形代价,甚至建议干脆放弃两者,手写轻量级的类型擦除实现。
这是一个“逻辑内存泄漏”:内存技术上仍可访问且会被析构函数释放,但只要对象存在,我们的 RAM 使用量就会随时间不断攀升,而程序的“逻辑”状态却没有任何改变。