Condividi tramite


operator new[] (CRT)

Alloca un blocco di memoria dall'heap.

void *__cdecl operator new[]( 
   size_t count 
); 
void *__cdecl operator new[] ( 
   size_t count,  
   void * object 
) throw(); 
void *__cdecl operator new[] ( 
   size_t count,  
   const std::nothrow_t& 
) throw();

Parametri

  • count
    Dimensione dell'allocazione.

  • object
    Un puntatore a un blocco di memoria in cui l'oggetto verrà creato.

Valore restituito

Un puntatore all'indirizzo di byte più basso dell'archiviazione appena allocata.

Note

Questo modulo di operator new è nota come vettore nuovo, in contrasto al nuovo modulo scalare (operatore nuovo).

Il primo modulo di questo operatore è noto come modulo di nonplacement. Il secondo modulo di questo operatore è noto come modulo di posizione ed il terzo è il modulo di posizione nonthrowing.

Il primo modulo dell'operatore è definito dal compilatore e non richiede che new.h venga incluso nel programma.

l'operatore delete[] libera la memoria allocata con l'operatore new.

È possibile configurare se operator new[] debba restituire null o generare un'eccezione in caso di errore. Per maggiori informazioni vedere Operatori new e delete.

Ad eccezione del comportamento di generazione o non generazione, operator new di CRT si comporta come l'operatore new[] della libreria C++ standard.

Requisiti

Routine

Intestazione obbligatoria

new[]

<new.h>

Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'Introduzione.

Librerie

Tutte le versioni delle Librerie di runtime C.

Esempio

Di seguito viene mostrato come utilizzare il vettore, il modulo di nonplacement di operator new.

// crt_new4.cpp
#include <stdio.h>
int main() {
   int * k = new int[10];
   k[0] = 21;
   printf("%d\n", k[0]);
   delete [] k;
}

Di seguito viene mostrato come utilizzare il vettore, il modulo di placement di operator new.

// crt_new5.cpp
#include <stdio.h>
#include <new.h>
int main() {
   int * i = new int[10];
   i[0] = 21;
   printf("%d\n", i[0]);
   // initialize existing memory (i) with, in this case, int[[10]
   int * j = new(i) int[10];   // placement vector new
   printf("%d\n", j[0]);
   j[0] = 22;
   printf("%d\n", i[0]);
   delete [] i;   // or, could have deleted [] j 
}

Di seguito viene mostrato come utilizzare il vettore, il modulo di placement senza generazione di operator new.

// crt_new6.cpp
#include <stdio.h>
#include <new.h>
int main() {
   int * k = new(std::nothrow) int[10];
   k[0] = 21;
   printf("%d\n", k[0]);
   delete [] k;
}

Vedere anche

Riferimenti

Allocazione di memoria