Quiero hacer una aclaración en cuanto a los
owners.
Ciertamente, el Owner de un Component es quien se encargará de destruirlo, pero no significa que sea su prerogativa exclusiva. Un Component, aun con dueño puede ser destruido explícitamente sin mayores problemas.
El destructor de TComponent hace esto:
Código Delphi
[-]
if Owner <> nil then
Owner.RemoveComponent(Self);
Básicamente, cuando una componente se destruye, repasa su lista de componentes (los que posee), destruyendo cada uno. El código de arriba muestra que al destruirse, una componente se quita ella misma de la lista de componentes de su dueño, rompiendo, por así decirlo, el contrato de propiedad. Cuando ese dueño eventualmente se destruya, no tendrá a la componente en su lista y por tanto no habrá ningún intento por destruir algo que ya no existe.
// Saludos