boost: test auf polymorphe Klassen
-
ich versuche grade einige sachen zu verstehen, die boost in den type_traits verwendet, und frage mich, wieso sich bei einem polymorphen typ d2 plötzlich größer als d1 sein soll, hab schon gegooglet und bei boost gesucht, aber nichts gefunden
template <class T> struct is_polymorphic_imp1 { typedef typename remove_cv<T>::type ncvT; struct d1 : public ncvT { d1(); ~d1()throw(); char padding[256]; }; struct d2 : public ncvT { d2(); virtual ~d2()throw(); struct unique{}; virtual void foo(unique*); char padding[256]; }; static const bool value = (sizeof(d2) == sizeof(d1)); };
wieso soll d2 plötzlich größer werden? in wieweit wirken sich die virtuellen methoden aus?
//edit rofl, ne halbe stunde überlegt, und dann aufeinmal aufs ergebnis gekommen
ist T nicht polymorph, dann wird der dtor auch nicht virtual sein t, und in dem fall ist der dtor von d1 auch nicht virtual und somit sollte es keine vtable geben.
der dtor von d2 ist aber immer virtual und somit gibts immer eine vtable.
dh d2 ist immer größer als d1, solange T keine vtable besitzt,wenn T die vtable besitzt sind beide gleich.ist das so richtigrum gedacht?
wenn ja, wieso braucht man dann die 256padding bytes und
struct unique{}; virtual void foo(unique*);
?