class _Defer
{
public:
~_Defer()
{
closure();
}
std::function<void()> closure;
};
#define _Defer_CONCATENATE_IMPL(s1, s2) s1##s2
#define _Defer_CONCATENATE(s1, s2) _Defer_CONCATENATE_IMPL(s1, s2)
#define defer _Defer _Defer_CONCATENATE(__Defer, __LINE__); _Defer_CONCATENATE(__Defer, __LINE__).closure = [&]()
class Test
{
public:
~Test()
{
std::cout << "destructor" << std::endl;
}
};
void test()
{
Test* a = new Test();
defer {
delete a;
};
std::cout << 123456 << std::endl;
}
输出:
123456
destructor