سؤال

وأنا أتصفح VTK 5.4.2 الرمز، ولا يمكن أن يبدو لفهم كيف يمكن للحذف) أعمال وظيفة (. أعني، وظيفة حذف () هي في vtkObjectBase وهي الظاهري، ولكن، من خلال ما سلسلة من الأوامر هو مدمر للطبقة vtkDoubleArray (على سبيل المثال) أعدم؟

وأطيب التحيات،

وmightydodol

هل كانت مفيدة؟

المحلول

وvtkObjectBase حذف () سيدعو UnRegisterInternal. إذا كانت الطبقات ReferenceCount أقل من أو يساوي 1 فإنه سيتم استدعاء حذف على الطبقة.

نصائح أخرى

وانها نوع من إشارة العد القمامة جامع.

إذا نظرتم vtkObjectBase، وهناك ثلاث وظائف - تسجيل إلغاء تسجيل وحذف. هذه هي التي تؤدي حساب مرجع.

عند كنت قد سجلت مثيل، لأنه يزيد عدد مرجع. عند إلغاء ذلك، فإنه النقصان. عندما المرجع. الروافد العد 0، حذفه. عند إنشاء كائن باستخدام جديد ()، ويبدأ مع عدد مرجع 0. كل مرة تريد مثيل مستقل من ذلك، يمكنك استدعاء التسجيل على ذلك، وذلك بزيادة المرجع. العد. حذف () هو مجرد اسم آخر للإلغاء ().

إذا قمت بتعيين كائن إلى كائن آخر (وضع مثيل vtkPolyData إلى خوارزمية كمدخل على سبيل المثال)، فإنه يدعو التسجيل مع المثال كنت تقوم إلى (الخوارزمية) كما الوالد. الآن، عندما يتم حذف الوالد (خوارزمية)، تم العثور على الأطفال وحذف معها.

وهناك أيضا وسيلة للتأكد من أنها لا تذهب إلى مهرجان دوري من إلى إلغاء تسجيل متبادل عندما تشير كائنين إلى بعضها البعض (vtkRenderer وvtkRenderWindow، على سبيل المثال)، ولكن هذا في الأساس هو.

وأيضا: يجب أن لا حاجة لاستدعاء حذف () في كثير من الأحيان. ومن الممكن دائما لاستخدام vtkSmartPointer بدلا من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top