我在理解指针的行为方面遇到了一些困难。 我有一个非常简单的例子来说明:
type
PSL = ^TStringList;
...
var
myPSL : PSL;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
New(myPSL);
myPSL^ := TStringList.Create;
myPSL^.Add('String 1');
myPSL^.Add('String 2');
myPSL^.Add('String 3');
end;
...
procedure TForm1.FormDestroy(Sender: TObject);
begin
Dispose(myPSL);
end;
使用这段代码,我得到了这个内存泄漏报告
29 - 36 bytes: UnicodeString x 3
37 - 44 bytes: Unknown x 1
85 - 92 bytes: TStringList x 1
现在,如果我调用:
myPSL^.Free;
在释放指针之前不报告任何内容。
我不明白为什么会这样。我知道调用New()会分配足够的内存(基于指针类型),调用Dispose()会负责释放该内存,那么为什么需要像“真实”对象一样Free指针呢?
谢谢!