语境:
假设外部库要求globalCleanup()调用其函数以确保其所有资源都被清除(它可能在其任何调用期间分配一些全局资源.)客户端函数client()在它的每个之前执行此操作return但当然这是不是异常安全的,代码是重复的.
问题:
是否有一种优雅的方法可以确保在client()退出时调用此全局函数?定义一个虚拟类,其唯一目的是在析构函数中调用全局函数(RAII样式)是一个选项,但是可能有更简单的东西?
TLDR:如何调用全局清理函数RAII风格?
class Cleaner {
public:
Cleaner() {}
~Cleaner() { ExtLib::CleanGlobal(); }
};
void client() {
Cleaner cleaner;
// Code that works with ExtLib
}
Run Code Online (Sandbox Code Playgroud)