I have sample code below can someone explain why delphi compiler not release all memory allocation for object so nil checking is always true. im using release method for destroying TLoginForm im not using free method because that gave me exception when some interfaced event called before free or after it.
type
TMainForm = class(TForm)
{some stuf}
public
procedure Create(AOwner: TComponent); override;
procedure doLogout();
end;
TChildBase = class(TForm)
{some stuf}
public
procedure Create(AOwner: TComponent); override;
end;
TLoginForm = class(TChildBase)
public
procedure doLogin();
end;
var
MainForm: TMainForm; {<== created automaticaly at runtime}
LoginForm: TLoginForm; {<== created at create event in TMainForm}
implementation
{TLoginForm}
procedure TLoginForm.doLogin;
begin
if true then
begin
{ Do Interfaced Event to main form }
Release;
end;
end;
procedure TMainForm.Create(AOwner: TComponent);
begin
inherited;
FormStyle := fsMDIForm;
LoginForm := TLoginForm.Create(Application); {Create login form}
end;
procedure TMainForm.doLogout;
begin
{ Do Interfaced Event to Child Form except TLoginForm to close}
if LoginForm <> nil then {<== this still alocated at memory}
LoginForm := TLoginForm.Create(Application)
else
LoginForm.Show; {<== Error raised here.}
end;