C++Gestione della memoria


Sintassi

  • : :( opt ) nuovo ( espressione-elenco ) ( opt ) nuovo-tipo-id nuovo-inizializzatore ( opt )
  • : :( opt ) nuovo ( espressione-elenco ) ( opt ) ( type-id ) new-initializer ( opt )
  • : :( opt ) elimina cast-expression
  • : :( opt ) delete [] cast-expression
  • std :: unique_ptr < id-tipo > var_name (nuovo tipo-id ( opt )); // C ++ 11
  • std :: shared_ptr < id-tipo > var_name (nuovo tipo-id ( opt )); // C ++ 11
  • std :: shared_ptr < id-tipo > var_name = std :: make_shared < id-tipo > ( opt ); // C ++ 11
  • std :: unique_ptr < id-tipo > var_name = std :: make_unique < id-tipo > ( opt ); // C ++ 14

Osservazioni

A leading :: forza l'operatore new o delete a cercare in ambito globale, ignorando qualsiasi operatore new o delete sovraccarico specifico della classe.

Gli argomenti facoltativi che seguono la new parola chiave vengono in genere utilizzati per chiamare il posizionamento nuovo , ma possono anche essere utilizzati per passare ulteriori informazioni all'allocatore, ad esempio un tag che richiede che la memoria venga allocata da un pool selezionato.

Il tipo allocato viene in genere specificato esplicitamente, ad esempio, new Foo , ma può anche essere scritto come auto (dal C ++ 11) o decltype(auto) (dal C ++ 14) per dedurlo dall'inizializzatore.

L'inizializzazione dell'oggetto assegnato avviene secondo le stesse regole dell'inizializzazione delle variabili locali. In particolare, l'oggetto verrà inizializzato di default se l'inizializzatore è omesso e, quando si assegna dinamicamente un tipo scalare o un array di tipo scalare, non si garantisce che la memoria venga azzerata.

Un oggetto array creato da una nuova espressione deve essere distrutto usando delete[] , indipendentemente dal fatto che la nuova espressione sia stata scritta con [] o meno. Per esempio:

using IA = int[4];
int* pIA = new IA;
delete[] pIA;  // right
// delete pIA;  // wrong

Gestione della memoria Esempi correlati