![]() |
1
12
您应该将create放在try finally块之外。
|
![]() |
2
4
评论中提出了一些问题,我想澄清一下。 不
创建的对象将是类的完整实例
在需要虚拟构造函数之前,必须满足两个条件:
这里需要认识到的重要一点是,这两条规则与决定何时使任何其他方法成为虚拟方法的因素没有区别。构造函数在这方面并不特别。 构造函数知道构造哪个类不是基于定义构造函数的类,而是基于调用构造函数的类,并且该类始终作为每个构造函数调用的隐藏第一个参数传递。
接下来,调用实例上的构造函数,传递
It's my opinion
那个
事实上,这种情况经常发生
总是
. 每次调用继承的构造函数时,都是在调用已经存在的对象上的构造函数。继承的构造函数未分配新对象。同样,VCL也有一些构造函数的非继承调用示例。
|
![]() |
3
2
当Create()引发异常时,关于内存泄漏的问题:您应该自己尝试一下。我刚刚在Delphi 2007上做过,在代码中,FastMM4显示了一个错误对话框,该对话框关于在已释放的对象上调用虚拟方法的尝试,即Destroy()。因此Create中的异常已经导致调用析构函数并释放内存,因此您的代码实际上是错误的。坚持用英语中的成语 answer by Gamecat ,一切都会好起来的。 编辑: 我刚刚在Delphi4上试过,行为也一样。测试代码:
|
![]() |
4
2
我不完全记得它是如何在旧的德尔福版本,但显然这应该在所有基于其他答复的工作。 注意,从我记事起,Create就一直在调用Destroy on fail。我想不应该是在我死后。
|
![]() |
Schadre · C-plus编码错误 2 年前 |
![]() |
Nithin K · 即使类属性的类型正确,也会获取异常 2 年前 |
![]() |
amirreza870 · Python OOP-更改类文本 2 年前 |
![]() |
A_K · 使用cat或打印方法打印部分内容的子集闭包 2 年前 |
![]() |
Mo Fatah · 如何使用Python类打印数独板? 2 年前 |