GO和Zig都自带了defer
语句,在涉及到资源管理时,可以在下一行立即加上对应的defer 释放资源
语句。这样在每次return后都会反向调用各个defer
¶C
要在C语言里实现defer,只能通过setjmp
或者goto
这种跳转,并且只能在return前进行。
¶C++
可以用std::unique_ptr
包装资源,需要自行实现deleter
。
defer
或scope_exit
的实现就是利用RAII,在当前位置创建一个类,析构的时候执行。
SCOPE_EXIT{ file.close(); };