Справочное руководство по языку Lua 5.1 :: 2.10.1 - Значения и типы



2.10.1 – Метаметоды сборщика мусора

Используя C API, мы можем определить метаметоды сборщика для данных типа userdata (смотрите §2.8). Эти метаметоды также называются файнолайзерами. Файнолайзер позволяет вам координировать работу сборщика мусора Lua с внешними менеджерами ресурсов (например при закрытии файлов, сетевых подключений и подключений к базам данных, или же при освобождении собственной памяти).

Данные сборщика мусора с полем __gc в собственной метатаблице не хранятся непосредственно в нем. Вместо этого Lua сохраняет их в списке. После сбора мусора Lua выполняет над этими данными функцию, эквивалентную:

function gc_event (udata)
local h = metatable(udata).__gc
if h then
h(udata)
end
end

После каждого цикла сбора, финализаторы каждого элемента данных вызываются в порядке, обратном порядку их создания в цикле. Таким образом, первый файнолайзер будет вызван для объекта, созданного последним..