Structs allozieren ?
-
Hi @ all !
Kann man eigentlich Structs via malloc allozieren ?Zum Beispiel
struct MyStruct My = (struct MyStruct*) malloc (Anzahl * sizeof(struct MyStruct)
-
ja, das geht, aber dann so:
struct MyStruct *My = (struct MyStruct*) malloc (Anzahl * sizeof(struct MyStruct));
-
Hallo,
wobei man in C++ für gewöhnlich das "struct" weglässt und in C dafür den Cast.Sprich:
// c++-isch MyStruct* my = static_cast<MyStruct*>(malloc(sizeof(MyStruct))); // c-isch struct MyStruct* my = malloc(sizeof(struct MyStruct));
-
wobei man in c++ sowieso eher "new" verwenden würde
-
HumeSikkins schrieb:
Hallo,
// c++-isch MyStruct* my = static_cast<MyStruct*>(malloc(sizeof(MyStruct)));
Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?
MfG
-
eViLiSSiMo schrieb:
Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?
ich denke es geht beides, aber static_cast wird üblicherweise dafür verwendet. warum auch immer.
-
net schrieb:
eViLiSSiMo schrieb:
Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?
ich denke es geht beides, aber static_cast wird üblicherweise dafür verwendet. warum auch immer.
Gerade das warum interessiert mich.
-
eViLiSSiMo schrieb:
net schrieb:
eViLiSSiMo schrieb:
Warum static_cast<> ? Ist das nicht eher ein Fall für reinterpret_cast<> ?
ich denke es geht beides, aber static_cast wird üblicherweise dafür verwendet. warum auch immer.
Gerade das warum interessiert mich.
Ein static_cast wird immer dann benutzt, wenn eine Konvertierung durchgeführt werden soll für die die gegenteilige Konvertierung implizit ist. Da es eine implizite Konvertierung von Data* nach void* gibt, verwendet man einen static_cast für die Konvertierung von void* nach Data*.
Ein reinterpret_cast verwendet man für den cast zwischen unverwandten Typen (das Mapping ist dabei immer "implementation defined"). Also z.B. zwischen Data* und OtherData* wobei Data und OtherData zwei nicht verwandte Typen wären. In diesem Fall ist dann das einzig sinnvolle was du mit dem Ergebnis machen kannst es mit einem reinterpret_cast zurück zu casten.