推迟执行 (defer)
defer 语句用于注册一个在当前块退出时执行的语句。它通常用于资源清理,如释放内存、关闭文件等。
基本用法
{
const file = try std.fs.cwd().openFile("test.txt", .{});
defer file.close(); // 确保文件在块退出时关闭
// 使用 file 做一些事情...
}
执行顺序
如果有多个 defer 语句,它们按逆序执行(后进先出)。
{
defer std.debug.print("1\n", .{});
defer std.debug.print("2\n", .{});
// 输出:
// 2
// 1
}
errdefer
errdefer 类似于 defer,但它只在当前块以返回错误的方式退出时执行。这对于部分初始化的清理非常有用。
fn createFoo() !*Foo {
const foo = try allocator.create(Foo);
errdefer allocator.destroy(foo); // 如果后续操作失败,释放 foo
foo.bar = try createBar();
return foo;
}
如果 createBar() 失败,createFoo 将返回错误,触发 errdefer 销毁 foo。如果 createBar() 成功,createFoo 返回 foo,errdefer 不会执行。
另请参阅:
- Errors (错误)