Desasignar un objeto std::vector en C++

Hafiz Muhammad Zohaib 12 octubre 2023
Desasignar un objeto std::vector en C++

Este artículo explicará cómo podemos desasignar los objetos std::vector en C++/C. Primero, veremos las formas autocodificadas de desasignación, y después de eso, examinaremos cómo los objetos std::vector se desasignan dinámicamente en C++.

Desasignar objetos en C++

Cuando se crea un objeto de clase en C++, se llama automáticamente a la función miembro especial conocida como constructor, que inicializa el objeto con algunos valores predeterminados. De manera similar, se llama automáticamente a una función miembro especial destructor cuando el objeto creado queda fuera del alcance.

Esta función destructora libera toda la memoria ocupada por el objeto creado. Este proceso de liberar la memoria ocupada por el objeto se conoce como desasignación.

el objeto std::vector

En C++, std es un espacio de nombres y el operador :: es un operador de alcance. Este operador de alcance le dice al compilador qué clase/espacio de nombres debe buscar el identificador/clase.

Si la expresión es como std::cout, significa buscar el identificador cout en el espacio de nombres std. De manera similar, std::vector significa buscar una clase de vector en el espacio de nombres std.

Para la desasignación, primero, necesitamos crear un objeto de la clase vector. Para eso, podemos usar el siguiente código con el compilador GCC C++11:

#include <iostream>
#include <vector>

int main() {
  // Create a vector containing integers
  std::vector<int> v = {7, 5, 16, 8};
}

El espacio de nombres std contiene varias bibliotecas de C++ en el código anterior. Primero agregamos explícitamente la biblioteca vector y la usamos para inicializar el vector con el tipo std::vector<int>.

Formas autocodificadas de desasignación de vectores en C++

En el siguiente código, escribimos explícitamente los comandos para eliminar el vector. Esto solo se aplica cuando usa la palabra clave nuevo para crear los vectores.

El operador nuevo señala una solicitud de asignación de memoria en la Tienda gratuita. Un operador nuevo asignará la memoria si hay suficiente espacio, la inicializará y luego proporcionará la ubicación de la memoria recién creada e inicializada a la variable de puntero.

En el siguiente código, primero inicializamos el puntero del vector, luego verificamos si era NULL o no. Después de hacer nuestro cálculo requerido, nos aseguramos a través de la declaración afirmar que el puntero del vector no está vacío.

Luego eliminamos el vector y su espacio ocupado usando la instrucción eliminar.

#include <cassert>
#include <iostream>
#include <vector>
using namespace std;

int main() {
  std::vector<int>* vec = new std::vector<int>;
  \\*** assert(vec != NULL);
  delete vec;
  return 0;
}

Usando el siguiente código, liberamos la memoria asignada por vec asignando un vector vacío después de hacer los cálculos necesarios. El comando std::vector<int>() crea un vector vacío con cero bytes.

La última sentencia comprueba la memoria ocupada por vec en bytes.

std::vector<int> vec;
\\***
\\*** vec = std::vector<int>();
std::cout << sizeof(decltype(vec.back())) * vec.capacity() << std::endl;

Formas dinámicas de desasignación de vectores en C++

En C++, cuando define un objeto std::vector dentro de una función (es decir, dentro de {....}), se llama automáticamente al constructor de la clase vector, que inicializa el objeto vector. Cuando finaliza la ejecución de la función (es decir, llega al corchete de cierre }), se llama automáticamente al destructor.

Por ejemplo,

void Foo() {
  std::vector<int> v;
  ...
}

C++ garantiza que se llamará al destructor de v cuando se ejecute el método. El destructor de std::vector se asegurará de que se libere cualquier memoria asignada.

Artículo relacionado - C++ Vector