|
|
1
6
如果您使用FastMM4作为内存管理器,可以检查该类是否不可用
TFreeObject
有这样的ValidateObj函数已经存在了一段时间(由Ray Lischner和Hallvard Vassbotn编写: http://hallvards.blogspot.com/2004/06/hack-6checking-for-valid-object.html )
更新:有点谨慎。。。上述函数将确保结果为nil或有效的非nil对象。如果内存管理器已经重新分配了先前释放的内存,那么它不能保证Obj仍然是您认为的那样。 |
|
|
2
3
不可以。除非您使用引用计数或垃圾收集器之类的方法来确保没有对象在引用为零之前被释放。 如果您使用接口,Delphi可以为您进行引用计数。当然,Delphi for.Net有一个gargage收集器。 如前所述,您可以使用Delphi的knowledege或内存管理器内部来检查有效的指针或对象,但它们并不是唯一可以为您提供指针的工具。因此,即使使用这些方法,也无法覆盖所有指针。还有一种可能性是,你的指针碰巧再次有效,但却给了其他人。因此,它不是您要寻找的指针。您的设计不应该依赖于它们。使用工具来检测您所做的任何引用错误。 |
|
|
3
1
标准,不。。。 这就是为什么VCL组件可以注册自己以获得对象销毁的通知,这样它们就可以从组件的内部列表中删除引用,或者只是重置它们的属性。 因此,如果您想确保没有任何无效引用,有两种选择:
|
|
|
4
1
|
|
|
5
1
不管怎样,检查引用是否有效通常不是一个好主意。如果引用无效,程序将在使用无效引用的位置崩溃。否则,无效引用可能会存活更长时间,调试变得更困难。 以下是一些关于为什么在无效引用上崩溃更好的参考。(他们谈论Win32中的指针,但这些想法仍然相关): |
|
|
6
0
|
|
7
0
使用接口引用(而不是对象引用)可以避免这些无效指针问题,因为代码中不再显式调用Free。 |
|
zeus · 如何在调整数组大小后保持指向动态数组的指针有效? 1 年前 |
|
|
SignalOne · 德尔福(FMX)循环参考 1 年前 |
|
|
Sascha Ott · 如何从线程调用线程的方法? 1 年前 |
|
|
user1580348 · 问题:如何在上次最小化后还原应用程序? 1 年前 |
|
tua · Delphi的TLinkLabel坏了吗? 2 年前 |
|
|
Frank.Wu · delphi:RGB到HSL不正确 2 年前 |