سؤال

ظننت أنني سمعت أن الطبقات د لها كلمتين (2 باطل*) من النفقات العامة بدلا من كلمة واحدة المطلوبة من قبل ج++.سمعت أيضا أن تخطيط الجدول غير متوافق مع ج++.هل أتذكر بشكل صحيح?إذا كان الأمر كذلك ما هو الأساس المنطقي لهذه القرارات?

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

المحلول

بعض الأشياء:

  1. في ج++ ، سيكون للفئة التي لا تحتوي على وظائف افتراضية صفر النفقات العامة.
  2. في د ، يرث الفصل دائما الوظائف الافتراضية من Object, ، لذلك دائما ما يكون ذلك __vptr النفقات العامة ، ولكن لديها أيضا __monitor, ، والتي لا تمتلكها كائنات الفئة ج.
  3. في كل من ج and و د ، سيكون هناك إضافية vptr لكل واجهة أن الطبقة تنفذ.

تخطيط فتابل غير متوافق مع ج because لأن د يتضمن مؤشر إلى أ TypeInfo المثال ، الذي يحتوي على معلومات نوع وقت التشغيل حول الفصل.ج obviously من الواضح أنه لا يحتوي على ذلك ، لذا فهو غير متوافق.

نصائح أخرى

المؤشر الإضافي هو كائن مراقب للفئات المتزامنة (يبدو أن هناك محادثات حول إزالة فئات غير متقلبة ولكنها لم تحدث).يتم توثيق التصميم في قسم ABI من المواصفات.

أنا لست متأكدا من كيفية تخطيط Vtable يختلف من كيفية قيام برامج التحويل البرمجيات C ++ بذلك.شخص آخر يمكن أن يجيب على ذلك.

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