Thread Bitte um Hilfe bei bless Fehler (39 answers)
Opened by bianca at 2019-09-28 17:06

Raubtier
 2019-09-30 15:31
#190592 #190592
User since
2012-05-04
1076 Artikel
BenutzerIn
[default_avatar]
2019-09-30T08:43:15 Muffi
Ansonsten braucht auch jedes andere Objekt jeder anderen (mir bekannten Sprache) einen Zeiger auf den Code und einen Zeiger auf die Daten.


Naja, eigentlich braucht ein Objekt gar keinen Zeiger. Nehmen wir mal folgende Klasse in C++:

Code: (dl )
struct MyClass { char c; };


Das ist eine Klasse, die ein char einhält. Sie ist - überraschung - nur 1 Byte groß: sizeof(MyClass) = 1.

In dem einen Byte ist kein Platz für Zeiger.

Wenn ich Funktionen drin habe, brauche ich noch immer keine Zeiger:
Code: (dl )
1
2
3
4
struct MyClass2 { 
void do_something();
char c;
};

Es ist immer noch: sizeof(MyClass2) = 1.

Einen Pointer zum Code brauche ich erst, wenn ich virtuelle Funktionen nutzen will:
Code: (dl )
1
2
3
4
struct MyClass3 { 
virtual ~MyClass3();
char c;
};

Plötzlich: sizeof(MyClass3) = 16

Die 16 Bytes sind aber 1 Byte für das char, 7 Bytes Padding (je nach Architektur), und 8 Bytes für den vtable-Pointer (auch je nach Architektur). Also auch nur 1 Pointer.

In C++ braucht man also 0 (wenn keine virtuellen Funktionen) oder 1 Pointer (mit virtuellen Funktionen). Wo braucht man denn 2 Pointer?

Edit: natürlich nur 7 und nicht 15 Bytes Padding.
Last edited: 2019-09-30 22:27:13 +0200 (CEST)

View full thread Bitte um Hilfe bei bless Fehler