a parte de lo mencianado por Descendents, cuando tengo que hacer reportes de esta manera, lo que hago es declarar arrays de los componentes que necesito
Código:
var
Labels : array of TQrLabel;
Labels : array of TQrDBText;
........
de esta manera, en el momento de liberar la memoria, sólo hay que recorrer el array haviendo un free de cada posición.
La destrucción depende de como montes el reporte. Personalmente tengo la manía de declarar un procedimiento público (public) al cual llamo y es el encargado de hacer todo el trabajo sucio (creación de objetos, lanzar SQLs, crear temporales,.....), lanzar el reporte (Print o Preview) y, si se da el caso, liberar objetos creados
Espero que la idea te guste