我正在使用VTK进行可视化,我的代码充满了他们的智能指针,例如:
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
我想知道后来New()
是否应该跟Delete()
这个Delete()
。或者
VTK“自动”摧毁一切。很多时候使用New()
我的代码崩溃了。所以,我想知道我是否应该首先使用它以及{{1}}背后的内容,共享指针或类似内容?
答案 0 :(得分:9)
vtkSmartPointer会在超出范围时“自动”销毁对象。 Delete()方法在它的dtor中调用。
如果没有vtkSmartPointer,您需要自己处理内存管理问题并调用Delete(),如下所示
vtkObject* MyObject = vtkObject::New();
MyObject->Delete();
vtkSmartPointer<vtkObject> MyObject = vtkSmartPointer<vtkObject>::New();
答案 1 :(得分:6)
的另一种选择
vtkSmartPointer<vtkObject> MyObject = vtkSmartPointer<vtkObject>::New();
是
vtkNew<vtkObject> MyObject;
请注意,当将MyObject传递给接收vtkObject *的函数/方法时,必须使用MyObject.GetPointer(),例如。
foo->SetObject(MyObject.GetPointer());