<分区>
让我们问你这个简单的作用域守卫:
template <class T>
struct finop_t {
T& t;
~finop_t() { t(); }
};
#define FINALLY__(l, cl) \
auto FIN ## l ## clo = cl; \
finop_t<decltype(FIN ## l ## clo)> FIN ## l ## fin { FIN ## l ## clo}
#define FINALLY_(l, cl) FINALLY__(l, cl)
#define FINALLY(...) FINALLY_(__LINE__, ([=](){__VA_ARGS__}))
int main() {
FINALLY( std::cout << "hello" << std::endl ; );
std::cout << "one" << std::endl;
FINALLY( std::cout << "world" << std::endl ; );
std::cout << "second" << std::endl;
return 0;
}
在这里依赖销毁命令安全吗?即假设 ~finop_t()
将在 lambda 析构函数之前被调用是否安全?