#include <iostream>
#include <functional>
using F1 = std::function<void()>;
using F2 = F1;
template <typename T1, typename T2>
class RAII {
public:
RAII(T1 t1, T2 t2) :f1(t1), f2(t2){
t1();
}
~RAII() {
f2();
f1 = nullptr;
f2 = nullptr;
}
private:
T1 f1;
T2 f2;
};
int a{};
F1 f1 = [&a](){a =1; std::cout << a << std::endl;};
F2 f2 = [&a](){a += 3; std::cout << a << std::endl;};
int main()
{
{
// RAII<F1, F2> raii(f1, f2);
// output:
// 1
// 4
// Hello World
}
// RAII<F1, F2> raii(f1, f2);
// output:
// 1
// Hello World
// 4
auto *raii = new RAII<F1, F2>(f1, f2);
delete raii;
// output:
// 1
// 4
// Hello World
std::cout << "Hello World" << std::endl;
return 0;
}
利用RAII处理第三方变量
发布时间 2023-03-27 16:36:49作者: flxx