Was ist der Rückgabetyp von new in C ++?

8

in C, malloc() gibt void* zurück. Aber in C ++, was gibt new zurück?

%Vor%     
kam 23.04.2010, 10:48
quelle

2 Antworten

30

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 führt zwei Dinge aus: Zuerst ruft es den neuen Operator auf, um Speicher zuzuweisen , und ruft dann den -Konstruktor für T auf. (Wenn der Konstruktor abbricht Mit einer Ausnahme wird auch der Löschoperator aufgerufen.)

Der bereits erwähnte neue Operator wird jedoch in verschiedenen Varianten angeboten. Der prominenteste ist dieser:

%Vor%

Man könnte es explizit nennen, aber das wird selten gemacht.

Es gibt andere Formen des neuen Operators , zum Beispiel für Arrays

%Vor%

oder das so genannte Placement new (was wirklich ein Fake-New ist, da es nicht alloziert):

%Vor%     
sbi 23.04.2010 10:54
quelle
8

Die Art des Wertes, der von new Type[x] und new Type zurückgegeben wird, ist Type * . Ihr Beispiel double d = new int enthält zwei Fehler:

  • Sie müssen das Ergebnis einem Zeiger zuweisen, wie folgt: double *d = new int
  • Der Zeiger muss ein Zeiger auf Type oder etwas sein, auf das ein Zeiger auf Type mithilfe impliziter Konvertierungen konvertiert werden kann: int *d = new int oder void *d = new int
Suma 23.04.2010 10:52
quelle

Tags und Links