C++Gestión de la memoria


Sintaxis

  • : :( opt ) nuevo ( expresión-lista ) ( opt ) new-type-id new-initializer ( opt )
  • : :( opt ) nuevo ( expresión-lista ) ( opt ) ( type-id ) new-initializer ( opt )
  • : :( opt) borrar fundido expresión
  • : :( Opción ) borrar [] expresión-cast
  • std :: unique_ptr < type-id > var_name (nuevo type-id ( opt )); // C ++ 11
  • std :: shared_ptr < type-id > var_name (nuevo type-id ( opt )); // C ++ 11
  • std :: shared_ptr < type-id > var_name = std :: make_shared < type-id > ( opt ); // C ++ 11
  • std :: unique_ptr < type-id > var_name = std :: make_unique < type-id > ( opt ); // C ++ 14

Observaciones

Un líder :: obliga a buscar el operador nuevo o de borrado en el ámbito global, anulando cualquier operador nuevo o de borrado específico de clase sobrecargado.

Los argumentos opcionales que siguen a la new palabra clave se usan generalmente para llamar ubicación nueva , pero también se pueden usar para pasar información adicional al asignador, como una etiqueta que solicita que la memoria se asigne de un grupo elegido.

El tipo asignado generalmente se especifica explícitamente, por ejemplo, new Foo , pero también se puede escribir como auto (desde C ++ 11) o decltype(auto) (desde C ++ 14) para deducirlo del inicializador.

La inicialización del objeto asignado ocurre de acuerdo con las mismas reglas que la inicialización de las variables locales. En particular, el objeto se inicializará por defecto si se omite el inicializador, y cuando se asigna dinámicamente un tipo escalar o una matriz de tipo escalar, no hay garantía de que la memoria se pondrá a cero.

Un objeto de matriz creado por una nueva expresión se debe destruir utilizando delete[] , independientemente de si la nueva expresión se escribió con [] o no. Por ejemplo:

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

Gestión de la memoria Ejemplos relacionados