Viejas practicas
Luego 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.