gpt4 book ai didi

delphi - 在delphi中释放多个对象

转载 作者:行者123 更新时间:2023-12-03 18:00:52 25 4
gpt4 key购买 nike

在下面,我插入了 Ray Konopka 编写的代码(Coderage 演示文稿的一部分)。我打算使用它,但是,我不确定如何(即时)清理多个对象。我所有的尝试都不成功,并导致内存泄漏。任何想法表示赞赏。谢谢,

  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.

最佳答案

在 Delphi 2009 中,TStringList 构造函数有一个可选的 bool 参数“OwnsObjects”。如果将其设置为 true,对象将自动释放。

否则您可以执行以下操作:

for i := Team.Count-1 downto 0 do begin
Team.Objects.Free;
end;
Team.Free;

顺便说一句,不鼓励使用公共(public)字段。您最好使用属性,以便控制对字段的访问权限。您还可以添加 setter 函数来验证输入。

type
TPlayer = class
private
FName : string;
FPosition : string;
FHits : Integer;
FAtBats : Integer;
public
constructor Create(const AName, APosition: string );

property Name: string read FName;
property Position: string read FPosition;
property Hits: Integer read FHits write FHits;
property AtBats: Integer read FAtBats write FAtBats;
end;

关于delphi - 在delphi中释放多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1019978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com