2009-08-28 3 views
3

VTK 5.4.2 코드를 통해 탐색 중이 었으며 Delete() 기능이 어떻게 작동하는지 알 수 없습니다. 즉, Delete() 함수는 vtkObjectBase에 있고 가상이지만 어떤 명령 체인을 통해 vtkDoubleArray 클래스의 소멸자 (예 :)가 실행됩니까?VTK Delete() 및 데이터 삭제

안부,

mightydodol vtkObjectBase 삭제

답변

6

은() UnRegisterInternal를 호출합니다. ReferenceCount 클래스가 1보다 작은 경우, 클래스의 delete를 호출합니다.

5

일종의 참조 계산 가비지 컬렉터입니다.

vtkObjectBase를 보면 Register, UnRegister 및 Delete의 세 가지 기능이 있습니다. 이들은 참조 카운팅을 수행하는 것들입니다.

인스턴스를 등록하면 참조 횟수가 늘어납니다. 등록 취소하면 감소합니다. ref. 개수가 0에 도달하면 삭제됩니다. New()를 사용하여 객체를 만들면 참조 카운트가 0으로 시작됩니다. 독립적 인 인스턴스를 원할 때마다 Register를 호출하고 ref를 증가시킵니다. 카운트. Delete()는 UnRegister()의 또 다른 이름입니다.

개체를 다른 개체로 설정하면 (예 : vtkPolyData 인스턴스를 알고리즘으로 입력으로 설정), 설정중인 인스턴스 (알고리즘)를 부모로 등록하여 Register를 호출합니다. 이제 부모 (알고리즘)가 삭제되면 그 자식도 함께 발견되고 삭제됩니다.

두 개체가 서로 참조 할 때 (예 : vtkRenderer 및 vtkRenderWindow) 상호 UnRegisters의 주기적 축제에 참석하지 않도록하는 방법도 있습니다.하지만 기본적으로 그 것입니다.

1

또한 Delete()를 자주 호출하지 않아도됩니다. vtkSmartPointer를 대신 사용할 수 있습니다.