为什么Delphi中的析构函数命名为?
Delphi中的析构函数通常被命名为“Destroy”,但据我所知,您也可以为什么Delphi中的析构函数命名为?,delphi,destructor,Delphi,Destructor,Delphi中的析构函数通常被命名为“Destroy”,但据我所知,您也可以 以不同的方式命名析构函数 有多个析构函数 有什么理由这样实施吗?不同名称/多个析构函数的可能使用情形是什么?理论上,您可以手动调用不同的析构函数来释放不同的外部资源,如中断引用计数循环、删除或只是关闭文件等 此外,由于对象Pascal语言没有那些神奇的new/delete操作,因此应该有一些标识符来调用以处理对象 我更愿意回顾一下 “带对象的Turbo-Pascal”样式的对象具有这两种特性—您可以调用“magic
- 以不同的方式命名析构函数
- 有多个析构函数
有什么理由这样实施吗?不同名称/多个析构函数的可能使用情形是什么?理论上,您可以手动调用不同的析构函数来释放不同的外部资源,如中断引用计数循环、删除或只是关闭文件等 此外,由于对象Pascal语言没有那些神奇的new/delete操作,因此应该有一些标识符来调用以处理对象 我更愿意回顾一下 “带对象的Turbo-Pascal”样式的对象具有这两种特性—您可以调用“magical”
Dispose
过程,但显式指定要调用的析构函数,因为语言本身不知道要选择什么。类似地,“魔术”程序New
必须与手动选择的构造函数一起提供
MyVar.Destroy
,编译器将查看.Destroy
的声明,并知道我们正在删除该对象。类似地,它知道TMyType.CreateXXX(YYY,ZZZ)
是一个对象实例,这是由于CreateXXX
的声明方式造成的
<> P>为了使C++和Dor在C++中没有命名,Delphi必须在语言层中再引入两个关键字,如C++ +代码>新< /代码>和<代码>删除< /代码>。这似乎没有明显的优势。至少就个人而言,我更喜欢德尔菲的方式
我必须加上一个假设:我们谈论的是真正的C++和德尔菲语言,因为它们大约在1995左右。它们只为堆分配的对象提供手动内存控制,没有垃圾收集,也没有自动引用计数。您无法通过使用nil/NULL指针分配变量来触发对象销毁。这很可能是为了一致性。但我从来没有见过这样的场景,除了覆盖虚拟销毁之外,你还可以做任何事情。最后一段太过激烈了。它完全可以在没有关键字支持的情况下完成。更多的C++构造函数和析构函数被命名。所以我可以让类
CMyClass
具有构造函数ABetterNameIKnow
?怎样?如果没有关键字和命名的构造函数,你会怎么做呢?该类的构造函数命名为CMyClass::CMyClass@DavidHeffernan,这意味着它们没有命名。命名是指我根据自己的选择命名。这正是那种命名,如begin
或while
关键字的命名。它们也是标识符,因此它们的命名与您的示例类似。它们的范围比CMyClass的范围要宽一些。我认为C++构造函数是命名的。如果它们没有命名,编译器如何知道如何找到它们。我们的谈话似乎有悖目的。我知道你的意思。我只是觉得你用的术语令人困惑。