【发布时间】:2014-12-24 18:34:13
【问题描述】:
如果你看一下 FreeAndNil 过程的代码,你会看到:
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;
他们将Nil 分配给对象引用并且仅在销毁它之后才分配的原因是什么?为什么不反过来呢?
【问题讨论】:
-
如果你切换并且析构函数引发了异常,你会得到一个过时的指针。无论您是否应该使用 FreeAndNil,您都可以阅读它here 并得出自己的结论。
-
@pf1957 - FreeAndNil 是not threadsafe,不管你怎么切换代码
-
@Andrew 那篇文章不是对此事的最终决定权。还有其他意见。并且不要将其视为永远不要调用 FreeAndNil 的一揽子建议。 Nick 认为,如果你按照他的方式编写代码,你就不需要 FreeAndNil。仅当您按照他所倡导的方式编写代码时,该论点才适用。并非所有代码都是这样编写的。
-
不重复,但是... stackoverflow.com/questions/8548843/…
-
我以前写过这个:cs.wisc.edu/~rkennedy/freeandnil
标签: delphi free procedure null