4

VTK 5.4.2 コードをブラウジングしていましたが、Delete() 関数がどのように機能するのか理解できないようです。つまり、Delete() 関数は vtkObjectBase にあり、仮想ですが、vtkDoubleArray クラスのデストラクタ (たとえば) が実行されるコマンド チェーンは何ですか?

よろしくお願いします、

マイティドドル

4

3 に答える 3

7

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

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

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

オブジェクトを別のオブジェクトに設定すると (たとえば、vtkPolyData インスタンスを入力としてアルゴリズムに設定する)、(アルゴリズムに) 設定しているインスタンスを親として Register が呼び出されます。現在、親 (アルゴリズム) が削除されると、その子も検出され、一緒に削除されます。

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

于 2012-02-16T07:26:58.760 に答える
5

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

于 2009-09-03T13:50:09.500 に答える
1

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

于 2013-04-29T16:26:14.320 に答える