vtk的vtkSmartPointer保证你只要在各个地方都用这个智能指针创建对象,就不会有内存泄漏。
vtkSmartPointer可以理解成STL的std::shared_ptr但是又不同。
vtkSmartPointer的引用计数器变量存储在被管理的动态对象里,而std::shared_ptr所管理的动态对象不负责引用计数,引用计数是std::shared_ptr自己的责任,std::shared_ptr通过复制控制来实现引用计数。
auto points = vtkPoints::New();//原始指针,需要手动释放,否则内存泄漏
vtkNew<vtkPoints> points1;//使用引用计数的智能指针
vtkSmartPointer<vtkPoints> points2 = vtkSmartPointer<vtkPoints>::New();//使用引用计数的智能指针
但是,VTK的接口传递都是原始指针 :
//这里是指针接口
unsigned long AddObserver(unsigned long event, vtkCommand *, float priority=0.0f);
//这里是智能指针接口
vtkSmartPointer<MyCallback> boxCa