You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

标准库中是否存在在析构函数中调用传入函数的类?

答案

C++20标准库里有完全符合你需求的工具——std::scope_exit(配套还有std::scope_success、std::scope_failure),这类对象会在自身析构时自动执行构造时传入的回调函数,是标准库原生的RAII式收尾操作组件。

对应示例代码

用std::scope_exit实现你写的Foo类的功能:

#include <scope>
#include <iostream>

int main() {
    auto rai = std::scope_exit([](){ std::cout << "dtor"; });
    // rai离开当前作用域时,lambda会被自动调用
}

补充细节

  • std::scope_exit是无条件执行回调:不管代码块是正常结束还是因异常退出,只要对象离开作用域就触发;
  • std::scope_success只在代码块**正常退出(无异常抛出)**时执行回调;
  • std::scope_failure只在代码块因异常退出时执行回调;
  • 这些对象支持移动,但禁止复制,完全契合RAII的设计逻辑。

如果你的项目暂不支持C++20,Boost库的boost::scope_exit是等价的第三方实现,但优先推荐标准库版本。

内容的提问来源于stack exchange,提问作者konradk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:10:30