errdefer
تعمل errdefer مثل defer تماماً، لكنها لا تُنفذ إلا إذا قامت الدالة بإرجاع خطأ. هذا ضروري جداً لتنظيف الموارد أو التراجع عن عمليات جزئية عند فشل العملية.
zig fn createData() !*Data { const data = try allocator.create(Data); errdefer allocator.destroy(data); // التنظيف فقط في حالة حدوث خطأ!
try data.initialize();
return data;
}
إذا فشلت initialize()، سيتم تحرير الذاكرة. أما إذا نجحت، فسيتم الاحتفاظ بالذاكرة.