为什么对象Free了,还可以调用该对象的属性值(50分)

  • 主题发起人 主题发起人 lindaolong
  • 开始时间 开始时间
L

lindaolong

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.btn1Click(Sender: TObject);
var
A, B: TTest;
Add_A: DWORD;
begin
A := TTest.Create;
A.Free;
A.Pro := 10;
ShowMessage(IntToStr(A.Pro));
// A := nil;
// Add_A := Integer(A);
// ShowMessage(IntToStr(Add_A));
end;
 
没人回答吗?
 
delphi 并非 完全 释放了 a := nil;
才清除 了指针 ,so that.
 
一般用 FreeAndNil(p);释放对象
 
FreeAndNil=Free V=nil;
这个还真没研究过
在此听课
 
测试,楼主的说法不正确,不知你的TTest是什么东东
var
A:TButton;
begin
A:=TButton.Create(form1);
A.Parent:=Form1;
A.Caption:='abc';
A.Free;
A.Caption:='bcd';
Caption:=a.Caption;
end;
 
TTest是个简单的类。
 
假释,内存中还在那放着呢,等nil后才找不到……
 
还不结贴啊! Free函数没写好吧
 
Free是用来释放内存的,所谓释放内存是指让这块内存重新可利用。你A.Free后,没有进行其它操作,A所占内存中的数据不会被修改,所以A.Pro仍然有值。看下面的试验:
窗体上放两个TButton,加一个Pointer类型的全局变量,然后在Button的Click事件中写以下代码。
procedure TForm1.Button1Click(Sender: TObject);
var A:TTest;
begin
A := TTest.Create;//这里创建类TTest的一个实例,并把这个实例的指针赋值给A(即A可以看成指针)
A.APros := 10;
pTest := addr(A);//这里pTest就成了指向指针的指针
A.Free;//这里把前面创建的实例的内存释放,但A指向的内存不会变
A := nil;//这里对A重新赋值,所以A的指向改变了(此时的A不指向任何内在区域)
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
i := TTest(Pointer(p^)).APros;
showmessage(inttostr(i));
end;
先击Button1,再击Button2
 
多人接受答案了。
 
后退
顶部