VTK Smartpointer新()

时间:2012-08-22 07:08:36

标签: vtk

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

vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

我想知道后来New()是否应该跟Delete()这个Delete()。或者 VTK“自动”摧毁一切。很多时候使用New()我的代码崩溃了。所以,我想知道我是否应该首先使用它以及{{1}}背后的内容,共享指针或类似内容?

2 个答案:

答案 0 :(得分:9)

vtkSmartPointer会在超出范围时“自动”销毁对象。 Delete()方法在它的dtor中调用。

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

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

vtkSmartPointer<vtkObject> MyObject = vtkSmartPointer<vtkObject>::New();

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

答案 1 :(得分:6)

的另一种选择
vtkSmartPointer<vtkObject> MyObject = vtkSmartPointer<vtkObject>::New();

vtkNew<vtkObject> MyObject;

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

foo->SetObject(MyObject.GetPointer());