gpt4 book ai didi

delphi - 释放对象后,对象的过程可以安全使用吗?

转载 作者:行者123 更新时间:2023-12-03 14:50:37 25 4
gpt4 key购买 nike

我编写了一个像这样的简单类:

TMyClass = class
procedure MyProcedure(Sender : TObject);
end;

在对象被释放后,我正在执行“MyProcedure”,其中我从不引用“Self”:

var
MyObj : TMyClass;
ProcOfObj : TNotifyEvent;
begin
MyObj := TMyClass.Create;
try
ProcOfObj := MyObj.MyProcedure;
finally
MyObj.Free;
end;

ProcOfObj(Self);
end;

它有效,但我想知道这是否是一种安全的做法,或者是否会导致一些问题。

最佳答案

如果 MyProcedure 及其调用的任何方法确实不引用 Self 实例,那么您将不会遇到运行时错误。然而,这是一个有风险的游戏。您所需要的只是在没有意识到这个问题的情况下对代码进行一些 future 的更改,然后您就进入了未定义的行为领域。您可能会遇到运行时错误,也可能不会。编译器也救不了你。

你不想冒这个风险。因此,由于您的方法不引用实例,因此不要使其成为实例方法。

type
TMyClass = class
class procedure MyProcedure(Sender : TObject);
end;

而是将其设为类方法。这样您就可以避免风险,并且如果您将来某个时候确实尝试引用该实例,编译器将拯救您。

关于delphi - 释放对象后,对象的过程可以安全使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38977717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com