delete y free() tienen funcionalidades similares en lenguajes de programación pero son diferentes. En C++, el operador de eliminación solo debe usarse para los punteros que apuntan a la memoria asignada mediante el operador new o para un puntero NULL, y free() solo debe usarse para los punteros que apuntan a la memoria asignada mediante malloc() o para un puntero NULL.
Las diferencias en eliminar y gratis son:
Eliminar() |
libre() |
---|---|
es un operador. | Es una función de biblioteca. |
Desasigna la memoria dinámicamente. | Destruye la memoria en tiempo de ejecución. |
Solo debe usarse para los punteros que apuntan a la memoria asignada mediante el operador nuevo o para un puntero NULL. | Solo debe usarse para los punteros que apuntan a la memoria asignada mediante malloc() o para un puntero NULL. |
Este operador llama al destructor después de que destruye la memoria asignada. | Esta función solo libera la memoria del montón. No llama al destructor. |
Es mas rapido. | Es comparativamente más lento que eliminar, ya que es una función. |
Nota: La razón más importante por la que free() no debe usarse para desasignar la memoria asignada usando new es que no llama al destructor de ese objeto mientras que el operador de eliminación sí lo hace.
Ejemplo de operador de eliminación:
CPP
// CPP program to demonstrate the correct and incorrect // usage of delete operator #include <cstdlib> #include <iostream> using namespace std; // Driver Code int main() { int x; int* ptr1 = &x; int* ptr2 = (int*)malloc(sizeof(int)); int* ptr3 = new int; int* ptr4 = NULL; // delete Should NOT be used like below because x is // allocated on stack frame delete ptr1; // delete Should NOT be used like below because x is // allocated using malloc() delete ptr2; // Correct uses of delete delete ptr3; delete ptr4; getchar(); return 0; }
Ejemplo de la función free():
C++
// CPP program to demonstrate the correct and incorrect // usage of free() function #include <cstdlib> #include <iostream> using namespace std; // Driver Code int main() { int* ptr1 = NULL; int* ptr2; int x = 5; ptr2 = &x; int* ptr3 = (int*)malloc(5 * sizeof(int)); // Correct uses of free() free(ptr1); free(ptr3); // Incorrect use of free() free(ptr2); return 0; }
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA