我正在浏览VTK 5.4.2代码,似乎无法理解Delete()函数是如何工作的.我的意思是,Delete()函数在vtkObjectBase中并且是虚拟的,但是,通过什么命令链是vtkDoubleArray类(例如)执行的析构函数?
最好的祝福,
mightydodol
小智 6
它是一种参考计数垃圾收集器.
如果你看一下vtkObjectBase,有三个函数 - Register,UnRegister和Delete.这些是执行引用计数的.
注册实例时,会增加引用计数.取消注册时,它会减少.当参考.计数达到0,它被删除了.使用New()创建对象时,它以引用计数0开始.每次需要它的独立实例时,都会在其上调用Register,并递增ref.计数.Delete()只是UnRegister()的另一个名称.
如果将对象设置为另一个对象(例如,将vtkPolyData实例设置为算法作为输入),则会将您正在设置的实例(算法)作为父项调用Register.现在,当删除父(算法)时,会找到其子项并将其与其一起删除.
还有一种方法可以确保当两个对象相互引用时(例如vtkRenderer和vtkRenderWindow),它们不会进入相互UnRegisters的循环节日,但基本上就是这样.