Delphi集合对象

时间:2017-01-27 14:02:56

标签: delphi

我创建了一个名为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;

1 个答案:

答案 0 :(得分:5)

制作:

Create

你永远不应该对变量调用Free,总是使用正确的构造函数语法,如上所述。

此外,请不要procedure TForm1.Button1Click(Sender: TObject); var a: TIstruzione; begin a := TIstruzione.Create; a.tipo := Add; a.rdest := 2; a.dato1 := 7; a.dato2 := 5; FList.Add(a); a := TIstruzione.Create; a.tipo := Load; a.rdest := 1; a.dato1 := 2; a.dato2 := -1; FList.Add(a); end; 您刚刚添加到列表中的项目:

TObjectList

TObjectList现在是所有者,因此对象将被OwnsObjects := True;释放,并且不应再被您释放。这就是package.json的含义。