私は Delphi のNew
andDispose
コマンドについて考えており、これらのコマンドをプロセス内の他のプロシージャ/関数/スレッドなどで使用できるかどうか疑問に思っていました。
アドレスをに保存したいのですが、変数の実際のアドレスを「保存」するために使用できる参照をTList
使用するため、少し不安です。var
アクセス違反などは望んでいません...これが私のコードです:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
MyTList : TList;
public
{ Public declarations }
end;
var
Form1 : TForm1;
type
TMyStruct = record
Int1 : Integer;
Int2 : Integer;
Str1 : String;
Str2 : String;
end;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
P_TMyStruct : ^TMyStruct;
I : Integer;
begin
for I := 1 to 3 do begin
New (P_TMyStruct);
P_TMyStruct^.Int1 := I;
P_TMyStruct^.Int2 := 1337;
P_TMyStruct^.Str1 := inttostr(I);
P_TMyStruct^.Str2 := '1337';
MyTList.Add(P_TMyStruct);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
I : Integer;
begin
for I := 0 to MyTList.Count - 1 do begin
ShowMessage(inttostr(TMyStruct(MyTList.Items[i]^).Int1));
ShowMessage(inttostr(TMyStruct(MyTList.Items[i]^).Int1));
ShowMessage(TMyStruct(MyTList.Items[i]^).Str1);
ShowMessage(TMyStruct(MyTList.Items[i]^).Str2);
Dispose(MyTList.Items[i]);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MyTList := TList.Create;
end;
end.
スタックに配置していないので、安全でしょうか?