2012-05-03 1 views
0

많은 vtk 개체가 전용 ​​멤버로 생성되는 vtk 프로젝트가 있습니다. 런타임 동안vtk 객체가 New()로 초기화되었는지 먼저 확인하여 삭제하는 방법은 무엇입니까?

vtkSmoothPolyDataFilter *m_SmoothFilter; 
vtkDecimatePro *m_DecimatePro; 
vtkCleanPolyData *m_CleanPolyData; 

는 이러한 개체 중 일부는 새로운() 명령으로 초기화되어 있지만, 그들 중 일부는하지 : .H 파일에서 나는 다음과 같은 VTK 객체를 초기화합니다. UI 포인터를 사용할 수 없기 때문에 스마트 포인터를 사용할 수 없기 때문에이 객체들을 소멸자에서 삭제해야합니다. 나는 그들이 초기화 여부를 이해하는 몇 가지 부울 검사 시스템을 사용해야합니다 :

if(m_SmoothFilter) 
    m_SmoothFilter->Delete() 
if(m_DecimatePro) 
    m_DecimatePro->Delete() 

그러나이 코드 발췌 객체가 초기화 여부를 감지하지 않습니다. 이 수표는 어떻게 할 수 있습니까?

답변

2

모든 포인터를 0으로 초기화하거나 new로 생성 된 실제 객체를 초기화하십시오. 그렇다면 C++ 삭제는 if없이 삭제할 수 있습니다 (제로 포인터를 삭제해도 괜찮습니다). 위의 Delete()가 무엇인지 모르겠습니다.

+0

해결 방법과 비슷합니다. 나는 많은 물체를 갖고 있으며 실제로 모든 것을 0으로 초기화하고 싶지 않습니다. 나는 다른 방법이 있어야한다고 생각합니다. 그러나 그렇지 않다면 나는 당신의 아이디어를 활용할 것입니다. –

+1

@EmreTurkoz : 해결 방법이 아니므로 C++에서 그 방법을 찾아야합니다./당신/아무것도 포인터를 초기화하지 않으면, 그들은 그냥 쓰레기를 포함합니다. 이 가비지와 실제 할당 된 객체의 포인터를 구별 할 방법이 없습니다. – PlasmaHH

+0

@PlasmaHH : 안내해 주셔서 감사합니다. 나는 묘사 된 방법대로 할 것이다. –

관련 문제