OnClose is a difficult beast because of the parameter CloseAction: normally CloseAction is caHide - this means that the form is not destroyed but hidden; this way the form can be reused later (Form.Show) without having to re-create it again. When you destroy a pointer needed by the form here you will run into problems when you re-show the form later. On the other hand you can set CloseAction to caFree - this means that the form really is destroyed, and destroying your pointer here will be correct.
But why don't you use the event OnDestroy. This fires always when the form is destroyed, and this is the correct place the destroy everything which has been created during the lifetime of the form.