in

¿Cuál es el equivalente de nuevo / eliminar de C ++ en C?

apple touch icon@2

Uso de new y delete en C ++ combina dos responsabilidades: asignar / liberar memoria dinámica e inicializar / liberar un objeto.

Como dicen todas las otras respuestas, la forma más común de asignar y liberar memoria dinámica es llamando malloc y free. También puede usar funciones específicas del sistema operativo para obtener una gran cantidad de memoria y asignar sus objetos en eso, pero eso es más raro, solo si tiene requisitos bastante específicos que malloc no satisface.

En C, la mayoría de las API proporcionarán un par de funciones que cumplen los otros roles de new y delete.

Por ejemplo, el archivo api usa un par de funciones de apertura y cierre:

// C++
fstream* fp = new fstream("c:\test.txt", "r");
delete fp;

// C
FILE *fp=fopen("c:\test.txt", "r"); 
fclose(fp);

Puede ser que fopen usos malloc para asignar el almacenamiento para el FILE struct, o puede asignar estáticamente una tabla para el número máximo de punteros de archivo en el inicio del proceso. El punto es que la API no requiere que el cliente use malloc y free.

Otras API proporcionan funciones que solo realizan la inicialización y liberación de parte del contrato, equivalente al constructor y destructor, lo que permite que el código del cliente utilice almacenamiento automático, estático o dinámico. Un ejemplo es la API de pthreads:

pthread_t thread;

pthread_create( &thread, NULL, thread_function, (void*) param); 

Esto permite al cliente más flexibilidad, pero aumenta el acoplamiento entre la biblioteca y el cliente; el cliente necesita saber el tamaño del pthread_t type, mientras que si la biblioteca maneja tanto la asignación como la inicialización, el cliente no necesita saber el tamaño del tipo, por lo que la implementación puede variar sin cambiar el cliente en absoluto. Ninguno introduce tanto acoplamiento entre el cliente y la implementación como lo hace C ++. (A menudo es mejor pensar en C ++ como un lenguaje de metaprogramación de plantilla con vtables que como un lenguaje OO)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

MongoDB – Tipos de datos

kNo3rZvmmm5EDRLtg29NUU 1200 80

Guía de desafíos de herbolarios de Red Dead Redemption 2: cómo completar las 10 tareas