VTK Smartpointer新()

IST*_*STB 2 vtk

我正在使用VTK进行可视化,我的代码充满了他们的智能指针,例如:

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
Run Code Online (Sandbox Code Playgroud)

我想知道如果New()以后不应该这样做Delete().或者VTK"自动"摧毁一切.很多时候使用Delete()我的代码崩溃.所以,我想知道我是否应该首先使用它,背后是什么New(),共享指针或类似的东西?

Yua*_*uan 9

当超出范围时,vtkSmartPointer将"自动"销毁对象.Delete()方法在它的dtor中调用.

如果没有vtkSmartPointer,您需要自己处理内存管理问题并调用Delete(),如下所示

vtkObject* MyObject = vtkObject::New();
MyObject->Delete();

vtkSmartPointer<vtkObject> MyObject = vtkSmartPointer<vtkObject>::New();
Run Code Online (Sandbox Code Playgroud)

请参阅维基页面:http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers


Utk*_*rsh 6

另一种替代方案

vtkSmartPointer<vtkObject> MyObject = vtkSmartPointer<vtkObject>::New();
Run Code Online (Sandbox Code Playgroud)

vtkNew<vtkObject> MyObject;
Run Code Online (Sandbox Code Playgroud)

请注意,当将MyObject传递给接受vtkObject*的函数/方法时,必须使用MyObject.GetPointer(),例如

foo->SetObject(MyObject.GetPointer());
Run Code Online (Sandbox Code Playgroud)