errdefer
errdefer est similaire à defer, mais il ne s'exécute que si la fonction retourne une erreur. C'est vital pour nettoyer un travail partiel lors d'une opération qui échoue.
zig fn createData() !*Data { const data = try allocator.create(Data); errdefer allocator.destroy(data); // Nettoyage uniquement en cas d'erreur !
try data.initialize();
return data;
}
Si initialize() échoue, la mémoire est libérée. S'il réussit, la mémoire est conservée.