Посмотрите на исходный код, и вы сами можете ответить на этот вопрос!
TForm наследует вдалеке от TComponent, если мы посмотрим на деструктор TComponent, мы увидим это (по крайней мере, в DelphiXE7):
destructor TComponent.Destroy;
begin
Destroying;
RemoveFreeNotifications;
DestroyComponents;
if FOwner <> nil then FOwner.RemoveComponent(Self);
FObservers.Free;
inherited Destroy;
end;
Здесь есть две важные линии:
DestroyComponents
Это уничтожит все принадлежащие ему компоненты при уничтожении, прежде чем сам владелец будет уничтожен.
if FOwner <> nil then FOwner.RemoveComponent(Self);
Это уведомляет владельца о том, что принадлежащий ему объект больше не существует и что он должен быть удален из списка компонентов владельца.
поэтому в вашем случае Application.MainForm будет принадлежать вашему экземпляру TMyForm, но при уничтожении он исчезнет из списка компонентов основной формы.
Короче говоря, ваш код отлично подходит и не будет разбиваться. Но чтобы было ясно, что вы управляете жизненным циклом компонента, вы должны передать nil как Owner в конструкторе. И поскольку Sertac Akyuz уже упомянул в комментариях, вы избежите вызова, FOwner.RemoveComponent(Self);
который будет экономить некоторые циклы процессора ...