【发布时间】:2017-01-27 14:02:55
【问题描述】:
我创建了一个名为TIstruzione 的简单类;我需要在运行时创建 4 个对象并将它们存储在一个数组中,以便我可以在需要时访问它们。
FList: TObjectList<TIstruzione>;
我在 TForm1 的公共部分创建了这个,因为我在 Delphi 的文档中看到这是一个合适的类通用容器。那我就这样管理他的一生:
procedure TForm1.FormCreate(Sender: TObject);
begin
FList.Create;
FList.OwnsObjects := true;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FList.Destroy;
end;
OwnsObject 确保对象归列表所有,当我释放列表时,里面的对象也被释放。我说的对吗?
如果您查看此处的代码,我正在尝试填充列表:
procedure TForm1.Button1Click(Sender: TObject);
var a: TIstruzione;
begin
a := TIstruzione.Create;
try
a.tipo := Add;
a.rdest := 2;
a.dato1 := 7;
a.dato2 := 5;
FList.Add(a);
finally
a.Free;
end;
a := TIstruzione.Create;
try
a.tipo := Load;
a.rdest := 1;
a.dato1 := 2;
a.dato2 := -1;
FList.Add(a);
finally
a.Free;
end;
end;
程序启动时出现错误。这是访问冲突;任何想法?为了完整起见,这个类就是这样的:
type
TTipo = (RISC_Add, RISC_AddI, RISC_Sub, RISC_SubI, RISC_Load, RISC_Store);
TPip = (MIPS_pipeline, PPC_pipeline);
type
TIstruzione = class
public
tipo: TTipo;
rdest: integer;
dato1: integer;
dato2: integer;
end;
【问题讨论】:
-
我认为你不应该在
TForm1.Button1Click中释放a -
为什么不呢?该值在释放之前存储在 FList 中
-
你不想释放它,因为它归 FLIst 所有,在你释放 FList 时会被销毁。
-
啊,好吧,所以我不需要尝试终于正确了吗?
-
是的,创建对象并将其添加到列表中,当列表被释放时,所有对象都会自动销毁。另外注意OwnsObjects默认为true,不需要指定这个
标签: delphi