Me gustaría aclarar un par de puntos menores.
1. No es una cuestión de una diferencia entre tipo y clase. Una clase
es un tipo de datos, eso sí, con todas las características que menciona
Lepe.
2. No es que un registro siempre consuma memoria. La memoria se libera automáticamente una vez que sale de alcance. Por ejemplo, registros declarados dentro de una función, se liberan al término de ésta.
3. En cierta forma, lo mismo sucede con los objetos. La variable que contiene la referencia siempre existirá hasta que salga de alcance. Recordemos que una variable de tipo clase no es sino un puntero. Lo que puede liberarse explícitamente es la memoria a la que apunta. Igual podríamos hacer con un registro si utilizamos un puntero y asignamos memoria:
Código Delphi
[-]
type
TMiRecord = record
...
end;
var
pr: TMiRecord;
begin
New(pr);
...
Dispose(pr);
end;
// Saludos