推迟执行 (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 返回 fooerrdefer 不会执行。

另请参阅: