2

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

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

我想知道New()以后是否不应该遵循Delete(). 或者VTK会“自动”摧毁一切。多次使用Delete()我的代码崩溃。所以,我想知道我是否应该首先使用它,后面是什么New(),共享指针或类似的东西?

4

2 回答 2

9

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

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

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

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

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

于 2012-08-22T07:33:07.670 回答
6

另一种选择

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

vtkNew<vtkObject> MyObject;

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

foo->SetObject(MyObject.GetPointer());
于 2013-08-01T00:00:34.237 回答