Аналог Defer как в GoLang

typedef std::function<void(void)> DeferFunc;
 
 
class Defer {
private:
     DeferFunc func;
public:
    explicit Defer(DeferFunc func) : func{func} {};
    ~Defer() {
        func();
        func = nullptr;
    };
};
 
int main() {
    ....
    SDL_Window* window = SDL_CreateWindow("EuX Force", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN);
    if (window == nullptr) {
        cerr << "Create window failed" << SDL_GetError() << endl;
        return EXIT_FAILURE;
    }
    Defer clear_window([window]() {
        SDL_DestroyWindow(window);
        cout << "window.free" << endl;
    });
    return EXIT_SUCCESS:
}