Meshloader macht Probleme
-
Bob Wolfskin schrieb:
Die Frage ist warum folgendes verschiedene größen angibt.
int _num = 3; Vertex* a = new Vertex[_num]; // das sind jetzt 3 Stück je 4 Bytes cout << sizeof(a) << endl; // Größe des Arrays cout << sizeof(Vertex) * 3 << endl; // Die richtige Größe jedoch größer als das ArrayDie Antwort ist:
sizeof(a) == sizeof(Vertex*) // a ist ein Vertex*
-
Aber durch die Instanzierung werden doch 3 Elemente reserviert oder icht ?
-
Bob Wolfskin schrieb:
Aber durch die Instanzierung werden doch 3 Elemente reserviert oder icht ?
Ja, aber die Information über die Größe des Arrays ist nicht über 'a' zu erreichen.
Die musst Du irgendwie mitschleppen.PS: Der Compiler ist Dir hier klar im Vorteil, weil der nämlich die Größe für
delete [] a;wieder auslesen kann...
-
Es gibt da so eine Klasse in der Standardbibliothek, die die Größe mitschleppt und sich automatisch um das new und delete kümmert....
-
Bob Wolfskin schrieb:
Aber durch die Instanzierung werden doch 3 Elemente reserviert oder icht ?
Dadurch wird der Pointer selber aber nicht größer. Nur der reservierte Speicher, auf den er zeigt.
Makro? schrieb:
Der Compiler ist Dir hier klar im Vorteil, weil der nämlich die Größe für
delete [] a;wieder auslesen kann...Streng genommen ist das nicht der Compiler, aber ich hab heute schon genug Haare gespalten

SeppJ schrieb:
Es gibt da so eine Klasse in der Standardbibliothek, die die Größe mitschleppt und sich automatisch um das new und delete kümmert....
Kschsch. Du willst hier doch niemanden zu sauberem C++ verführen, oder?
-
pumuckl schrieb:
Makro? schrieb:
Der Compiler ist Dir hier klar im Vorteil, weil der nämlich die Größe für
delete [] a;wieder auslesen kann...Streng genommen ist das nicht der Compiler, aber ich hab heute schon genug Haare gespalten

Fiel mir auch auf, aber:
Ohne Registrierung keine Editierung...
-
Ich könnte das ganze auch folgenderweise machen:
(Wird jedoch nicht auf dem Stack sondern auf dem Heap verbleiben)Vertex *v = (Vertex*)malloc(sizeof(*v)); new (v) Vertex(); //oder so ähnlichDabei wird direkt der Speicherbereich reserviert

Ist aber vollkommen unnötig
-
Nenn mal einen einzigen Vorteil von malloc/placement new gegenüber "normalem" new und einen einzigen Vorteil von new genenüber std::vector.
-
SeppJ schrieb:
Nenn mal einen einzigen Vorteil von malloc/placement new gegenüber "normalem" new
Man kann reallozieren.

-
Kellerautomat schrieb:
SeppJ schrieb:
Nenn mal einen einzigen Vorteil von malloc/placement new gegenüber "normalem" new
Man kann reallozieren.

Nicht, wenn du einen Konstruktor brauchtest, denn dann geht eine eventuelle Verschiebung schief.