C++ VTK Delete()和数据删除

C++ VTK Delete()和数据删除,c++,vtk,C++,Vtk,我浏览了VTK5.4.2代码,似乎不明白Delete()函数是如何工作的。我的意思是,Delete()函数在vtkObjectBase中并且是虚拟的,但是,vtkDoubleArray类的析构函数(例如)是通过什么命令链执行的呢 致以最良好的祝愿 mightydoolvtkObjectBase Delete()将调用UnRegisterInternal。如果classes ReferenceCount小于或等于1,它将对该类调用delete。这是一种引用计数垃圾收集器 如果查看vtkObject

我浏览了VTK5.4.2代码,似乎不明白Delete()函数是如何工作的。我的意思是,Delete()函数在vtkObjectBase中并且是虚拟的,但是,vtkDoubleArray类的析构函数(例如)是通过什么命令链执行的呢

致以最良好的祝愿


mightydool

vtkObjectBase Delete()将调用UnRegisterInternal。如果classes ReferenceCount小于或等于1,它将对该类调用delete。

这是一种引用计数垃圾收集器

如果查看vtkObjectBase,有三个函数-注册、取消注册和删除。这些是执行引用计数的

注册实例时,会增加引用计数。当你注销它时,它会减少。当参考计数达到0时,它被删除。使用New()创建对象时,引用计数为0。每次您需要它的一个独立实例时,您都会对它调用Register,它会增加ref.count。Delete()只是UnRegister()的另一个名称

如果将一个对象设置为另一个对象(例如,将vtkPolyData实例设置为算法作为输入),它将调用Register,并将要设置的实例(算法)作为父对象。现在,当父(算法)被删除时,它的子代将被找到并与之一起删除


还有一种方法可以确保当两个对象相互引用时(例如vTkrender和vtkRenderWindow),它们不会进入相互取消注册的循环节日,但基本上就是这样。

另外:您不需要经常调用Delete()。几乎总是可以使用vtksmart指针