Utilizar el operador delete en C++
-
Utilice el operador
delete
para liberar los recursos asignados para el objeto -
Utilice el operador
delete
para liberar elementos en Vector
Este artículo explicará varios métodos de cómo utilizar el operador delete
en C++.
Utilice el operador delete
para liberar los recursos asignados para el objeto
Los objetos asignados dinámicamente que utilizan el operador new
deben liberarse antes de la salida del programa, lo que significa que el llamador es responsable de invocar explícitamente la operación de delete
. Observe que los inicializadores del constructor se pueden utilizar para declarar e inicializar objetos con el operador new
. El siguiente código de ejemplo demuestra tal escenario y luego libera los recursos correspondientes antes de regresar de la función main
. Tenga en cuenta que no llamar al operador delete
en los objetos del montón resultará en una pérdida de memoria, lo que llevará a un uso masivo de memoria para los procesos de larga ejecución.
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::string;
using std::vector;
int main() {
int *num = new int(1024);
auto *sp = new string(10, 'a');
cout << *num << endl;
cout << *sp << endl;
for (const auto &item : *vp) {
cout << item << ", ";
}
cout << endl;
delete num;
delete sp;
return EXIT_SUCCESS;
}
Producción :
1024
aaaaaaaaaa
Los operadores new
y delete
también se pueden usar con contenedores de biblioteca estándar. Es decir, el objeto std::vector
se asigna e inicializa en una sola declaración en el siguiente código de ejemplo. Una vez que el operador new
devuelve un puntero al vector
, podemos realizar operaciones en él como con el objeto vector
normal.
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::vector;
int main() {
auto *vp = new vector<int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (const auto &item : *vp) {
cout << item << ", ";
}
cout << endl;
delete vp;
return EXIT_SUCCESS;
}
Producción :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
Utilice el operador delete
para liberar elementos en Vector
El uso del operador delete
con matrices asignadas dinámicamente es ligeramente diferente. Generalmente, new
y delete
operan en los objetos uno a la vez, pero los arrays necesitan que se asignen varios elementos con una llamada. Por lo tanto, la notación entre corchetes se utiliza para especificar el número de elementos en el array, como se demuestra en el siguiente código de ejemplo. Una asignación como esta devuelve un puntero al primer elemento, que puede desreferenciarse para acceder a diferentes miembros. Finalmente, cuando el array no es necesaria, debe liberarse con una notación especial delete
que contiene corchetes vacíos, lo que garantiza que cada elemento ha sido desasignado.
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <random>
#include <vector>
using std::cout;
using std::endl;
using std::setw;
using std::vector;
constexpr int SIZE = 10;
constexpr int MIN = 1;
constexpr int MAX = 1000;
void initPrintIntVector(int *arr, const int &size) {
std::random_device rd;
std::default_random_engine eng(rd());
std::uniform_int_distribution<int> distr(MIN, MAX);
for (int i = 0; i < size; ++i) {
arr[i] = distr(eng) % MAX;
cout << setw(3) << arr[i] << "; ";
}
cout << endl;
}
int main() {
int *arr1 = new int[SIZE];
initPrintIntVector(arr1, SIZE);
delete[] arr1;
return EXIT_SUCCESS;
}
Producción :
311; 468; 678; 688; 468; 214; 487; 619; 464; 734;
266; 320; 571; 231; 195; 873; 645; 981; 261; 243;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook