Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 破坏与自由与封闭有什么区别_Delphi - Fatal编程技术网

Delphi 破坏与自由与封闭有什么区别

Delphi 破坏与自由与封闭有什么区别,delphi,Delphi,我最近在学习Delphi,但当我想关闭对话框或窗体时,它可以使用close、Free和Destroy命令 这些命令之间有什么区别?我应该如何决定使用哪一个命令?t格式。关闭 在VCL中,根据窗体的状态关闭窗体。如果您的FFormState是FSModal它将执行取消操作。 如果您的表单是MainForm,则整个应用程序将被终止,依此类推。有关更多信息,请查看TCustomForm.Closesystem.pas内部的。 最终的结果是你再也看不到表单了,但这并不意味着你对表单的引用被破坏了 .fr

我最近在学习Delphi,但当我想关闭对话框或窗体时,它可以使用close、Free和Destroy命令


这些命令之间有什么区别?我应该如何决定使用哪一个命令?

t格式。关闭

在VCL中,根据窗体的状态关闭窗体。如果您的
FFormState
FSModal
它将执行取消操作。 如果您的表单是
MainForm
,则整个应用程序将被终止,依此类推。有关更多信息,请查看
TCustomForm.Close
system.pas内部的
。
最终的结果是你再也看不到表单了,但这并不意味着你对表单的引用被破坏了

.free

free也可以调用destroy,但正如David所说,它是零引用安全的,所以在大多数情况下,您应该使用free而不是destroy


.destroy
t表单关闭

在VCL中,根据窗体的状态关闭窗体。如果您的
FFormState
FSModal
它将执行取消操作。 如果您的表单是
MainForm
,则整个应用程序将被终止,依此类推。有关更多信息,请查看
TCustomForm.Close
system.pas内部的
。
最终的结果是你再也看不到表单了,但这并不意味着你对表单的引用被破坏了

.free

free也可以调用destroy,但正如David所说,它是零引用安全的,所以在大多数情况下,您应该使用free而不是destroy


.destroy

这本书怎么说?这本书有点开放。在Free和Destroy之间,通常使用Free,因为它是零引用安全的。我想这不重要,但在编写析构函数时很重要。因此,在“释放”和“关闭”之间,这取决于您希望如何管理窗体的生存期。请始终调用
Free
,而不是
Destroy
。这就是它的目的。至于
关闭
,这取决于形式。它是怎么说的?这个有点开放。在Free和Destroy之间,通常使用Free,因为它是零引用安全的。我想这不重要,但在编写析构函数时很重要。因此,在“释放”和“关闭”之间,这取决于您希望如何管理窗体的生存期。请始终调用
Free
,而不是
Destroy
。这就是它的目的。至于
Close
,这取决于表单。在表单的析构函数中调用FreeAndNil有什么意义,为什么不直接调用Free?这就是TCustomForm.Destroy所做的!ist释放项目并将指针引用设置为零。您确定吗,@fisi pjm?销毁析构函数无权访问用于调用它的指针引用,因此无法将其设置为NIL。这就是为什么一开始会有一个自由和零。我想我们彼此都说了过去。TCustomForm包含在VCL.Form中。为什么会有访问问题?您认为TCustomForm.Destroy设置为NIL的“指针引用”是什么?如果我调用MyForm.Destroy,那么之后“MyForm”的值是什么?不变还是零?(答案不变)。在窗体的析构函数中调用FreeAndNil有什么意义,为什么不直接调用Free?这就是TCustomForm.Destroy所做的!ist释放项目并将指针引用设置为零。您确定吗,@fisi pjm?销毁析构函数无权访问用于调用它的指针引用,因此无法将其设置为NIL。这就是为什么一开始会有一个自由和零。我想我们彼此都说了过去。TCustomForm包含在VCL.Form中。为什么会有访问问题?您认为TCustomForm.Destroy设置为NIL的“指针引用”是什么?如果我调用MyForm.Destroy,那么之后“MyForm”的值是什么?不变还是零?(答案没有改变)。