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

Bri*_*awk 3 delphi memory-management object

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

var
  Msg: TAMessage;
begin
  Msg := TAMessage.Create();
  Msg.ProcessAndDone;
end;
Run Code Online (Sandbox Code Playgroud)

我想要TAMessage.ProcessAndDone()方法来破坏对象本身(在上面的例子中Msg),因为我在调用ProcessAndDone方法后不需要对象,我不想打电话FreeDestroy每次打电话后ProcessAndDone(为了代码清晰) .

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

Dav*_*nan 5

如果最后的行为ProcessAndDone是打电话Destroy,或者Free,那么它就没事了.如果ProcessAndDone调用方法,或引用成员,在它被销毁之后,那就没有用了.当然,你需要放入一个try/finally内部ProcessAndDone以确保破坏发生.

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

obj := TMyObject.Create;
Run Code Online (Sandbox Code Playgroud)

我们也希望能看到一个try/finally块来打电话Free.不要违背粮食.