質問
私はVTK 5.4.2コードを拾い読みし、[削除()関数が機能しない方法を理解するように見えることはできません。私が意味する、[削除()関数は、コマンドのどのチェーンを通じてvtkDoubleArrayクラスのデストラクタは、(例えば)が実行され、vtkObjectBaseにあり、仮想ですが、?
よろしく、
mightydodol
解決
vtkObjectBaseは、(削除)UnRegisterInternalを呼び出します。クラスReferenceCountが1以下であれば、それはクラスで削除を呼び出します。
他のヒント
これは参照カウントガベージコレクタのようなものだ。
あなたはvtkObjectBaseを見れば、、3つの関数があります - 登録、登録解除および削除します。これらは、参照カウントを行うものであります。
あなたは、インスタンスを登録すると、、それは参照カウントが増加します。あなたはそれの登録を解除すると、それが小さくなります。ときREF。カウントは、それが削除されます、0になります。あなたが新しい()を使用してオブジェクトを作成すると、それは、あなたがそれに登録を呼び出す0の参照カウントあなたはそれとは独立してインスタンスをするたびに開始され、それが参照をインクリメントします。カウント。登録解除()。
のためのちょうど別の名前である)(削除します あなたが他のオブジェクト(例えば、入力としてアルゴリズムにvtkPolyDataインスタンスを設定)にオブジェクトを設定した場合は、、それはあなたが親として(アルゴリズム)に設定しているインスタンスに登録を呼び出します。親(アルゴリズム)が削除されたときに今、その子どもたちが発見し、それに沿って削除されます。
があり2つのオブジェクトが相互に参照するとき、彼らは(vtkRendererとvtkRenderWindow例えば、)相互登録を解除の巡回祭りに行かないようにする方法もありますが、それは基本的にはこれだけです。
また:あなたは非常に頻繁に)(削除呼び出す必要はありません。代わりにvtkSmartPointerを使用することはほとんど常に可能である。