C++ - 一种确保调用全局清理函数的异常安全方法

Raf*_*ird 1 c++

语境:

假设外部库要求globalCleanup()调用其函数以确保其所有资源都被清除(它可能在其任何调用期间分配一些全局资源.)客户端函数client()在它的每个之前执行此操作return但当然这是不是异常安全的,代码是重复的.

问题:

是否有一种优雅的方法可以确保在client()退出时调用此全局函数?定义一个虚拟类,其唯一目的是在析构函数中调用全局函数(RAII样式)是一个选项,但是可能有更简单的东西?

TLDR:如何调用全局清理函数RAII风格?

mmm*_*mmm 5

class Cleaner {
  public:
    Cleaner() {}
    ~Cleaner() { ExtLib::CleanGlobal(); }
};

void client() {
  Cleaner cleaner;

  // Code that works with ExtLib
}
Run Code Online (Sandbox Code Playgroud)

  • @Rafal Dowgird:实际上有一个`boost :: scope_exit`类. (3认同)