以下のサンプルコードがあります デルファイコンパイラがすべてのメモリ割り当てを解放しない理由を説明できる人は です。私は解放メソッドを使用してTLoginFormを破壊するためにfreeメソッドを使用していません。どこにもあなたのコード内リリースを完了するにはどうすればいいですか?
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;
Davidさん、まあ、私はdoLogoutで納得できる理由でチェックをした理由を確認します。だから私のチェックの方法は、それを無関係と比較すると間違っていた。 https://stackoverflow.com/a/8550628/は私にとって役に立ちました。 –