标准库中是否存在在析构函数中调用传入函数的类?
答案
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
相关产品推荐
相关产品推荐

