指针问题,在线等 ( 积分: 100 )

  • 主题发起人 主题发起人 wsp_731
  • 开始时间 开始时间
W

wsp_731

Unregistered / Unconfirmed
GUEST, unregistred user!
p:^Tsheetitem;
begin
p:=@TSheetItem.Create;
showmessage(inttostr(p.InstanceSize));

为什么出错亚
 
p:^Tsheetitem;
begin
p:=@TSheetItem.Create;
showmessage(inttostr(p.InstanceSize));

为什么出错亚
 
p :=new Tsheetitem;
 
没用过这种方法,是不是应该
P^ := TSheetItem.Create;阿

或者
另外弄一个TSheetItem的变量 ,然后用指针
 
我的问题是想用一个指针获取一定的空间,然后将对象复制到空间了,这样,我就可以用一个数组存储一组对象了
 
保存对象就可,为何用指针?
 
对象本身就是一个指针,这样就可以
var
b: TButton;
begin
b := tButton.Create(nil);
showmessage(inttostr(b.InstanceSize));
b.Free;
end;
 
var
b: pointer;
begin
b := tButton.Create(nil);
showmessage(inttostr(TButton(b).InstanceSize));
TButton(b).Free;
end;
这样更清楚一点
 
数组不能存储对象呀,只能出此下策,让数组指向很多空间,每一个空间存储一个对象
 
如果是这种:x:^pchar,如何取得X所指的值?
 
如果我现在需要存储100个TPerson对象,应该怎么办呢?用Person:array of TPerson,我试过了,在赋值得时候出错,应该怎么办呢?
 
数组应该可以保存对象吧.

var
a:array of Pointer;

....

SetLength(a,100); //100个Ponter数组.
.....
 
是不是new(Tsheetitem);
 
晕,不早说

var
L: TList;
P : TPerson;
begin
L:= TList.Create;
for I:= 0 to 99 do begin
P := TPerson.Create;
L.Add(P);
end;


释放的时候

for I:= 0 to L.count -1 do begin
TPerson(L.Items(I)).Free;
end;
L.Free;
 
发错了,不好意思
 
TList有点繁,不如SetLength(数组,长度)简洁.
 
chenybin
不是发给我的么?
 
解决了额
 
刚刚发到另外一个地方了,我写个例子给你算了,SetLength会存在实例不能释放的问题,因为你存的是类的实例,不是普通变量,

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TPerson = class
Name : string;
Sex : Boolean;
end;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FPersonList : TList;
public
{ Public declarations }
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
I : Integer;
Person : TPerson;
begin
for I := 0 to 99 do begin
Person := TPerson.Create;
Person.Name := IntTostr(i);
FPersonList.Add(Person);
end;
end;

constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
FPersonList := TList.Create;
end;

destructor TForm1.Destroy;
var
I : Integer;
begin
for I:= 0 to FPersonList.Count -1 do
TPerson(FPersonList.Items).Free;
FPersonList.Free;
inherited;
end;

end.
 
chenybin
我在需要person的时候怎么从tlist里面取出来呢
 

Similar threads

回复
0
查看
876
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
后退
顶部