C++Guns – RoboBlog

04.09.2014

virtual inheritance and sizeof()

Filed under: Allgemein — Tags: , — Thomas @ 10:09

Folgender Code:


#include < iostream >
#include < stdint.h >

using namespace std;

class Base {
   public:
   int32_t a;
};

class Derived :  public Base {
public:
  int32_t b;
};

class VirtualDerived : virtual  public Base {
public:
  int32_t c;
};

int main() {
  cout << "sizeof Base " << sizeof(Base) << "\n";
  cout << "sizeof Derived " << sizeof(Derived) << "\n";
  cout << "sizeof VirtualDerived " << sizeof(VirtualDerived) << "\n";

  return 0;
}

ergibt auf einer 32Bit Maschine folgende Ausgabe

sizeof Base 4
sizeof Derived 8
sizeof VirtualDerived 12

Die Größe der VirtualDerived Klasse ist also nicht einfach die Summer zweier 4Byte Variablen, sondern auch noch zusätzlich ein 4Byte Pointer auf die Base Klasse.

Auf einer 64Bit Maschine sind es entsprechend 16Byte

sizeof Base 4
sizeof Derived 8
sizeof VirtualDerived 16

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress