Mit neuen void-Zeiger auf
int main()
{
void* Foo = new???
delete Foo;
}
Wie machst du so etwas wie die oben genannten? Sie können nicht new void[size]
. Und ich möchte nicht wissen, wie es mit malloc()
und free()
. Ich weiß schon, dass das funktioniert. Ich bin neugierig und will wissen, wie es gemacht wird, mit new und delete.
Googelte ich dieses und sah etwas über operator new(size)
; und operator delete(size)
;
Was ist der Unterschied zwischen denen und new
/delete
? Warum hat C++ nicht nur, dass neue void* [size]
?
Warum wollen Sie ein
Ich bin nur neugierig, weil ich sehen es seiend getan in C. in C, ich sah jemanden tun, void* Foo = malloc(size); Es ist die gleiche Sache, nicht?
Nein ist es nicht. In C++
void *
in C++?Ich bin nur neugierig, weil ich sehen es seiend getan in C. in C, ich sah jemanden tun, void* Foo = malloc(size); Es ist die gleiche Sache, nicht?
Nein ist es nicht. In C++
new type[3]
reserviert 3 mal der Größe des Typs, wo malloc müsste in etwa so Aussehen: malloc(3*sizeof(type))
InformationsquelleAutor Brandon | 2013-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
void
ist kein Objekt; es hat keine Größe! Wie viel Platz sollte reserviert werden? Beachten Sie, dassnew T[size]
ist etwa entsprichtmalloc(sizeof(T) * size)
.Wenn Sie wollen einfach nur eine raw-byte-array, dann könnten Sie
char
.** Obwohl, natürlich, denn das ist C++, die Sie verwenden sollten so etwas wie
std::vector<char>
zu vermeiden memory-leak und der Ausnahme-Fragen der Sicherheit.ist das nicht möglich... Die Analog\
malloc
Aufruf wäremalloc(sizeof(void)*N)
, die nicht kompilieren.Es nicht "erlauben";
malloc
ist nicht typesafe; um das zu können, ordnen Sie jedem Zeiger-Typ, der es zurückkehren muss einvoid *
.Ich nicht denken Sie raw-Speicher verwenden sollte
new char[n]
: der reservierte Speicher enthält Objekte des Typschar
. Raw Arbeitsspeicher ist mitoperator new(n)
oderoperator new[](n)
(oder entsprechende Zuweisung der Mitglieder).InformationsquelleAutor Oliver Charlesworth
Wird dies den trick tun:
Diese Operatoren allocate/deallocate-raw-Speicher, gemessen in bytes, wie
malloc
.InformationsquelleAutor ybungalobill
C++ Reisen in gebauten Objekte zugeordnet sind verwenden einige variation von
new T
. odernew T[n]
für irgendeine ArtT
. Wenn Sie wirklich brauchen, nicht initialisierter Speicher (es ist sehr selten, dass Sie tun), können Sie allocate/deallocate es mitoperator new()
undoperator delete()
:(in ähnlicher Weise werden für die array-Formen)
InformationsquelleAutor Dietmar Kühl
void *
wird die Wandelanleihe zu jedem Zeiger-Typ. Sie können einfach tunvoid *Foo = new int
oder jede andere Art, die Sie möchten. Aber es gibt wirklich nicht einen Grund, dies zu tun in C++.InformationsquelleAutor 0x499602D2