defer语句

(1 min to read)

GO和Zig都自带了defer语句,在涉及到资源管理时,可以在下一行立即加上对应的defer 释放资源语句。这样在每次return后都会反向调用各个defer

C

要在C语言里实现defer,只能通过setjmp或者goto这种跳转,并且只能在return前进行。

C++

可以用std::unique_ptr包装资源,需要自行实现deleter

deferscope_exit的实现就是利用RAII,在当前位置创建一个类,析构的时候执行。

SCOPE_EXIT{ file.close(); };