TStrings类型的变量,已经free掉了,为什么它不等于nil呢?

Juddy 2000-12-27 05:19:00
try
t:=TStringList.Create;
t.add('a');
finally
t.free;
end;
此时t并不等于nil ,这是为什么?
...全文
212 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCB 2000-12-28
  • 打赏
  • 举报
回复
可能这不认为是个问题!
C++BUILDER 是用delete 来释放所有单元的,它的语法如下:

<::> delete <cast-expression>
<::> delete [ ] <cast-expression>
delete <array-name> [ ];
释放的一个表达式,自然不能再去置空了;
还有链接是一个单向关系,源头可能很多,仔细想想就能接受了.







Juddy 2000-12-28
  • 打赏
  • 举报
回复
多谢各位,我自己也这样实验了,没错。我现在就是很奇怪,为什么帮助中从不这样举例呢?
BCB 2000-12-28
  • 打赏
  • 举报
回复
这是普遍现象,C++BUILDER所有指针也这是这样;
不仅仅是TStringList,其它所有控件也
是这样:只释放单元,不管源指针;
解决办法:很简单,释放后,自行将指针置空;
原因:存在就是道理;对于源指针的情况可能较复杂,
置空会出现技术问题,如果不是一个变量呢?或
只读变量呢?(参数传递时);设计师也是"超高手",早就深思熟虑想到了;










GoodHope 2000-12-28
  • 打赏
  • 举报
回复
如果是函数中的局部变量,不用判断。每次调用函数时,变量的都地址不一样。
GoodHope 2000-12-28
  • 打赏
  • 举报
回复
一个类被释放,只是内存被释放。类变量本身只是一个指针,就像动态内存释放后,指针不会自动变为nil一样。所以,要养成当类释放时,立刻将变量设为nil的习惯。这样再使用时就可以判断了。
Juddy 2000-12-28
  • 打赏
  • 举报
回复
但是如果我先创建了一个TStrings类型的变量,用完后删除,下次再用时如何判断这个变量是否存在呢?不用判断吧?
ePing 2000-12-27
  • 打赏
  • 举报
回复
Free:Destroys an object and frees its associated memory, if necessary.Use Free to destroy an object. Free automatically calls the destructor if the object reference is not nil. Any object instantiated at runtime that does not have an Owner should be destroyed by a call to Free, so that can be properly destroyed and the memory released. Unlike Destroy, Free is successful even if the object is nil, so if the object was never initialized, Free won't result in an error.

记得看帮助

三少 :o)
wenzm 2000-12-27
  • 打赏
  • 举报
回复
这个。。。。。。。。?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧