TIstruzione
という簡単なクラスを作成しました。私は実行時に4つのオブジェクトを作成し、それらを必要に応じてアクセスできるように配列に格納する必要があります。オブジェクトのDelphiコレクション
FList: TObjectList<TIstruzione>;
私は、これはクラスに対するしっくり来るの汎用コンテナであることをDelphiのドキュメントで見てきたので、私はTForm1のパブリックセクションでこれを作成しました。それから私は、このように彼の生涯を管理するつもりです:
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を解放すると破棄されるため、値を解放したくありません。 –