如何从一个自己的方法中释放一个对象?

时间:2014-03-22 20:41:52

标签: delphi object memory-management

有没有办法从一个自己的方法中安全地释放一个对象? (我不需要将对象变量为零)

var
  Msg: TAMessage;
begin
  Msg := TAMessage.Create();
  Msg.ProcessAndDone;
end;

我想要TAMessage.ProcessAndDone()方法来销毁对象本身(在上面的例子Msg中)因为我在调用ProcessAndDone方法后不需要该对象,而且我不知道我希望每次拨打Free后都致电DestroyProcessAndDone(为了代码清晰起见)。

我知道设置TThread的FreeOnTerminate属性会这样做,但实际的释放过程由一个名为ThreadProc的包装器处理,该包装器调用线程内的Execute

1 个答案:

答案 0 :(得分:5)

如果ProcessAndDone的最后一幕是DestroyFree,那么就可以了。如果ProcessAndDone调用方法,或者在成员被销毁之后引用成员,那么它就没有用了。当然,您需要在try/finally内置ProcessAndDone以确保破坏发生。

但是所有这一切,你都不应该这样做。为了清晰起见,存在模式,并且为了其他读者的利益。每当我们看到

obj := TMyObject.Create;

我们还希望通过调用try/finally看到Free块。不要违背粮食。