下面,我插入了Ray Konopka編寫的代碼(Coderage演示文稿的一部分)。我打算使用它,但是,我不確定如何清理(即時)多個對象。 我所有的嘗試都是不安全的,並導致內存泄漏。 任何想法表示讚賞。 謝謝,在delphi中釋放多個對象
program stringlistDictionary;
{$APPTYPE CONSOLE}
uses
Classes,
SysUtils;
type
TPlayer = class
public
Name: string;
Position: string;
Hits: Integer;
AtBats: Integer;
constructor Create(Name, Position: string);
end;
constructor TPlayer.Create(Name, Position: string);
begin
inherited Create;
Self.Name := Name;
Self.Position := Position;
Hits := 0;
AtBats := 0;
end;
var
Team: TStringList;
Player, NewPlayer: TPlayer;
I: Integer;
function FindPlayer(const Name: string): TPlayer;
var
Idx: Integer;
begin
Result := nil;
if Team.Find(Name, Idx) then
Result := TPlayer(Team.Objects[ Idx ]);
end;
begin {== Main ==}
Writeln('StringList Dictionary');
Writeln('---------------------');
Writeln;
Team := TStringList.Create;
try
NewPlayer := TPlayer.Create('Aramis Ramerez', 'Third Base');
NewPlayer.Hits := 120;
NewPlayer.AtBats := 350;
Team.AddObject(NewPlayer.Name, NewPlayer);
NewPlayer := TPlayer.Create('Derrick Lee', 'First Base');
NewPlayer.Hits := 143;
NewPlayer.AtBats := 329;
Team.AddObject(NewPlayer.Name, NewPlayer);
NewPlayer := TPlayer.Create('Ryan Theriot', 'Short Stop');
NewPlayer.Hits := 87;
NewPlayer.AtBats := 203;
Team.AddObject(NewPlayer.Name, NewPlayer);
Player := FindPlayer('Derrick Lee');
if Player <> nil then
Writeln('Player Found: ', Player.Name, ', ', Player.Position)
else
Writeln('Player not found.');
Writeln;
Writeln('Active Roster');
Writeln('-------------');
for I := 0 to Team.Count - 1 do
Writeln(TPlayer(Team.Objects[ I ]).Name, #9,
TPlayer(Team.Objects[ I ]).Position);
Readln;
finally
//!! Need to free the players.
Team.Free;
end;
end.
其他說明:Self.Name等在構造函數是不必要的。爲何使用控制檯應用程序?爲什麼不把一個單獨的課程用於玩家名單? – 2009-06-19 21:12:09
如果這是整個應用程序,你*不需要釋放任何內存,因爲無論如何你已經完成應用程序 – BlackTigerX 2009-06-19 21:13:09
@BlackTigerX:這看起來像一個簡單的例子。對於這種情況,你是對的,但是他試圖使用它的真實代碼可能要複雜得多。 – 2009-06-19 22:22:08