Pares init y destroy en C
Cada recurso recibe un init que puede fallar y un destroy que no.
#include <stdlib.h>
#include <string.h>
typedef struct {
char *name;
int *values;
size_t count;
} Session;
int session_init(Session *s, const char *name, size_t count) {
memset(s, 0, sizeof *s);
size_t n = strlen(name) + 1;
s->name = malloc(n);
s->values = calloc(count, sizeof(int));
if (s->name == NULL || s->values == NULL) {
free(s->name);
free(s->values);
memset(s, 0, sizeof *s);
return 0;
}
memcpy(s->name, name, n);
s->count = count;
return 1;
}
void session_destroy(Session *s) {
free(s->name);
free(s->values);
memset(s, 0, sizeof *s);
}
Cómo funciona
- Init retorna éxito y deja el objeto usable o vacío.
- Destroy tolera un objeto construido a medias.
- Poner en cero al destruir vuelve inofensiva una segunda llamada.
Palabras clave y builtins usados aquí
NULLcharconstifintreturnsize_tsizeofstructtypedefvoid
El intento, en números
- Líneas
- 31
- Caracteres a escribir
- 551
- Tokens
- 195
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 111 segundos.
Paso 2 de 3 en Encapsulación; paso 6 de 11 en APIs, errores y pruebas.