@ agnasg

agnasg


Viejas practicas

05-07-2015 10:22 AM

I-refuse-to-use-mallocLuego de muchos años y con el advenimiento de C++11 (y sus nuevas encarnaciones C++14 y C++17) me resultada realmente molesto ( o quizás hasta bochornoso) que mi vieja rutina strsave () continuara pululando dentro de mis aplicaciones y juegos. La primera versión la escribí en 1981 basado en el texto de K & R, y algo parecido se puede encontrar en casi cualquier aplicación desarrollada en C.

char *strsave (const char *id)
{
    char *str;

    if ((str = (char *) malloc (strlen (id) + 1)) == NULL) {
            g_write_debug ("strsave: out of memory");
            return NULL;
    }
    strcpy (str, id);
    return str;
}

La pregunta es ¿por qué? Con std:string esto dejó de ser necesario por lo menos hace 15 años. Viejas prácticas supongo, y que el programador C sigue escondido en alguna parte dentro de mí. std:string se puede encargar complemente del negocio de manejo de la memoria. La explicación clave es la siguiente: “std::string usa el allocator por defecto std::allocator, dado que std::allocator usa new y delete, la memoria heap es usada, así que el string es permanente hasta que el programa termina, o el programador hace algo al respecto.