in C, gibt void*
zurück. Aber in C++, was gibt new
zurück?Was ist der Rückgabetyp von Neu in C++?
double d = new int;
in C, gibt void*
zurück. Aber in C++, was gibt new
zurück?Was ist der Rückgabetyp von Neu in C++?
double d = new int;
Typ Wert zurückgegeben von beiden new Type[x]
und new Type
ist Type *
. Ihr Beispiel double d = new int
enthält zwei Fehler:
double *d = new int
int *d = new int
oder void *d = new int
Es gibt zwei Dinge, die Sie unterscheiden müssen. Einer ist ein neuer Ausdruck. Es ist der Ausdruck new T
und sein Ergebnis ist ein T*
. Es macht zwei Dinge: Erstens, es ruft die neuen Betreiber- Speicher zuzuweisen, und den Konstruktor für T. ruft (Wenn der Konstruktor mit einer Ausnahme bricht, wird es auch die Operator löschen rufen.)
Die vorgenannte neuen Betreiber, kommt jedoch in verschiedenen Geschmacksrichtungen. Der prominenteste ist dieser:
Sie könnten es explizit nennen, aber das ist selten jemals getan.
Es gibt andere Formen des neuen Betreibers, zum Beispiel für Arrays
void* operator new[](std::size_t);
oder die so genannte Platzierung neue (was wirklich ein fake-neu ist, da es keine Zuteilung von):
void* operator new(void*, std::size_t);
Zum Beispiel int * p = new int, es gibt int * zurück, dann wie hat die Signatur void *? – kam
Große Antwort auf eine dumme Frage. Das Plakat scheint nicht zu wissen, wie "neu" in die Sprache passt. Die Antwort erklärt dies sehr schön. – Suma
"int p = neuer int, es gibt int zurück", tut es nicht. Ich gebe int * (Zeiger auf int) zurück. – Suma
@Suma: Während ich mit Ihren Gefühlen gegenüber KAM Fragen grundsätzlich einverstanden sind, glaube ich, dass dies ein echt ist und die wichtige Unterscheidung zwischen einem _new EXPRESSION_ und dem _new operator_ ist schwer zu finden, wenn nach "operator new" gegoogelt wird. – sbi
@Suma: Eine schlechte Frage kann immer noch zu guten Antworten führen. –
http://stackoverflow.com/questions/240212/what-is-the-difference-between-new-delete-and-malloc-free –