c++シンscope_guard
782 ワード
#pragma once
#include <functional>
struct scope_guard {
typedef std::function<void()> Fn;
Fn action;
bool active;
scope_guard(Fn action) : action(action), active(true) {}
void dismiss() {
active = false;
}
~scope_guard () {
if(active) action();
}
};
test:
#include <windows.h>
#include <iostream>
using namespace std;
#include "scope_guard.h"
void test() {
void* memory = malloc(100);
scope_guard g([&]() {
free(memory);
cout << "memory freed" << endl;
});
bool error_occur = true;
if(error_occur) return;
g.dismiss();
}
int main() {
test();
}