문제

VTK 5.4.2 코드를 탐색하고 있었으며 delete () 함수가 어떻게 작동하는지 이해할 수 없습니다. Delete () 함수는 vtkobjectbase에 있고 가상이지만, 어떤 명령 체인을 통해 vtkdoublearray 클래스 (예 : 실행)의 파괴자는 무엇입니까?

친애하는,

Mightydodol

도움이 되었습니까?

해결책

vtkobjectbase delete ()는 unrgisterinternal을 호출합니다. 클래스 참조가 1보다 작거나 같으면 클래스에서 삭제를 호출합니다.

다른 팁

그것은 일종의 참조 계산 쓰레기 수집가입니다.

vtkobjectbase를 보면 등록, 등록 및 삭제의 세 가지 기능이 있습니다. 이들은 참조 계산을 수행하는 것입니다.

인스턴스를 등록하면 참조 수가 증가합니다. 등록 해제되면 감소합니다. 심판. 카운트가 0에 도달하면 삭제됩니다. new ()를 사용하여 객체를 만들 때 0의 참조 수로 시작합니다. 독립적 인 인스턴스를 원할 때마다 레지스터를 호출하고 Ref를 증가시킵니다. 세다. delete ()는 unregister ()의 또 다른 이름입니다.

객체를 다른 객체로 설정하는 경우 (예를 들어 vtkpolydata 인스턴스를 알고리즘으로 입력으로 설정), 부모로 설정 (알고리즘)으로 설정하는 인스턴스로 레지스터를 호출합니다. 이제 부모 (알고리즘)가 삭제되면 어린이가 발견되어 삭제됩니다.

두 개체가 서로를 언급 할 때 (예를 들어 vtkrenderer 및 vtkrenderwindow) 상호 등록의 주기적 축제에 들어 가지 않도록하는 방법도 있지만, 기본적으로 IT입니다.

또한 : Delete ()를 매우 자주 호출 할 필요가 없습니다. 대신 vtksmartpointer를 사용하는 것이 거의 항상 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top