有没有办法从一个自己的方法中安全地释放一个对象? (我不需要将对象变量为零)
var
Msg: TAMessage;
begin
Msg := TAMessage.Create();
Msg.ProcessAndDone;
end;
我想要TAMessage.ProcessAndDone()
方法来销毁对象本身(在上面的例子Msg
中)因为我在调用ProcessAndDone
方法后不需要该对象,而且我不知道我希望每次拨打Free
后都致电Destroy
或ProcessAndDone
(为了代码清晰起见)。
我知道设置TThread的FreeOnTerminate
属性会这样做,但实际的释放过程由一个名为ThreadProc的包装器处理,该包装器调用线程内的Execute
。
答案 0 :(得分:5)
如果ProcessAndDone
的最后一幕是Destroy
或Free
,那么就可以了。如果ProcessAndDone
调用方法,或者在成员被销毁之后引用成员,那么它就没有用了。当然,您需要在try/finally
内置ProcessAndDone
以确保破坏发生。
但是所有这一切,你都不应该这样做。为了清晰起见,存在模式,并且为了其他读者的利益。每当我们看到
obj := TMyObject.Create;
我们还希望通过调用try/finally
看到Free
块。不要违背粮食。