==== 一个所有使用 BORLAND 产品的程序员都会遇到的一个问题 ====(30分)

  • 主题发起人 主题发起人 ddev
  • 开始时间 开始时间
D

ddev

Unregistered / Unconfirmed
GUEST, unregistred user!
在 BORLAND 主要产品 DELPHI 及 C++ BUILDER 中,
如果写出下列语句:
Delphi: BCB:
AObject.Free;
delete AObject;
AObject := nil;
AObject = NULL;
编译时,系统提示:AObject assigned value but never used.
AObject 被赋值后却从未再使用 ------- 问题是:在 D/BCB 中,
我发现,对象释放后,AObject 并不是立即就等于 NULL(nil),
VCL 的机理只是“通知”(notify)该对象已经删除,这是一个非常
危险的事,对象归位必须明确,因为许多应用中需要这样。
那么,请问:如果我强制对象归位 0,VCL 编译出现警告后,在编译
过程中,会不会把这句话“滤”掉呢?
 
freeandnil(aboj)
 
AObject本来就是指针,归不归0应该是程序员的责任,再说,你如果有10个指针都
指向AObject,他怎么知道有多少个指针指向AObject。
 
楼上的大概没理解我的意思,我要说的是:
在编译器优化过程中,会不会对
AObject = NULL 这句话“优化”掉?
还是象 VC 一样,认为是完全正常的语句而
强制归位 0 。
 
仔细看了一下 BORLAND 的帮助,下面是其内容:
The compiler gives this hint message if the value
assigned to a variable is not used. If optimization
is enabled, the assignment is eliminated.
^^^^^^^^^^^
其实不然,如果是对象,zw84611 的方法是对的,也是
Delphi 推荐的,但对于一般的内存分配,Delphi 显然
认为它有足够的“智能”去管理!是真正的聪明,还是
弱智?!
 
同意zw84611...
 
在AObject这个指针不用的时候AObject = NULL 这句话“优化”掉,对你也没有任意影响。
如果还要用。Delphi或BCB不会优化掉的。
 
多人接受答案了。
 
后退
顶部