2009-08-28 9 views
3

VTK 5.4.2のコードを参照していたため、Delete()関数がどのように機能するのか分かりません。つまり、Delete()関数はvtkObjectBaseにあり、仮想ですが、vtkDoubleArrayクラスのデストラクタがどのようなコマンドチェーンで実行されるのですか?VTK Delete()とデータ削除

よろしく、

mightydodol

答えて

6

vtkObjectBaseは、(削除)がUnRegisterInternalを呼び出します。クラスReferenceCountが1以下の場合、クラスのdeleteを呼び出します。

5

これは一種の参照カウントのガベージコレクタです。

vtkObjectBaseを見ると、Register、UnRegister、Deleteの3つの機能があります。これらは参照カウントを実行するものです。

インスタンスを登録すると、参照カウントが増加します。登録を解除すると、それは減少します。 ref。カウントが0に達すると、それは削除されます。 New()を使ってオブジェクトを作成すると、参照カウント0で始まります。独立したインスタンスが必要になるたびに、Registerを呼び出し、refをインクリメントします。カウント。 Delete()はUnRegister()の別名です。

オブジェクトを別のオブジェクトに設定すると(vtkPolyDataインスタンスをアルゴリズムとして入力に設定するなど)、設定しているインスタンス(アルゴリズム)を親として登録を呼び出します。今、親(アルゴリズム)が削除されると、その子はそれと共に見つけられ削除されます。

2つのオブジェクト(vtkRendererとvtkRenderWindowなど)が互いに参照している場合、それらが相互UnRegistersの周期的な祭りに入らないようにする方法もありますが、基本的にはそれです。

1

また、非常に頻繁にDelete()を呼び出す必要はありません。ほとんどの場合、代わりにvtkSmartPointerを使用することが可能です。

関連する問題