2012-08-22 80 views
2

我使用VTK的可視化和我的代碼是充滿了smartpointers的,如:VTK智能指針新()

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

什麼我想知道,如果這New()不應該後來Delete()緊隨其後。還是 VTK會「自動」破壞所有內容。多次使用Delete()我的代碼崩潰。所以,我想知道我是否應該首先使用它,以及背後的New(),共享指針或類似的東西?

回答

8

當超出範圍時,vtkSmartPointer將「自動」銷燬對象。 Delete()方法在它的dtor中被調用。

沒有vtkSmartPointer,你需要自己照顧的內存管理問題,並調用刪除(),就像下面

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

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

見wiki頁面:http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers

+0

謝謝!然後我不需要修改我的代碼... – ISTB

+0

需要注意的是,在VTK中還有其他一些智能指針類,vtkNew給出了一個強大範圍的智能指針對象,並創建了自動對象,vtkWeakPointer提供了一個弱引用將不會刪除該對象,但如果該對象在別處被刪除,則會返回null。 –

5

另一種替代

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

vtkNew<vtkObject> MyObject; 

請注意,將MyObject傳遞給接受vtkObject *的函數/方法時,必須使用MyObject.GetPointer()(例如,

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