Por lo tanto, quiero obtener una mejor comprensión de cómo funcionan los literales de cadenas en C++. Me preocupan más las situaciones en las que se está asignando la dirección de un literal de cadena a un puntero y pasándolo por alto. Por ejemplo:¿Qué tan seguros y confiables son los Literals de C++ String?
char* advice = "Don't stick your hands in the toaster.";
Ahora digamos que acabo de pasar esta cadena copiando punteros durante la duración del programa. Claro, probablemente no sea una buena idea, pero tengo curiosidad por saber qué estaría sucediendo detrás de escena.
Para otro ejemplo, digamos que hacemos una función que devuelve una cadena literal:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
Ahora digamos que esta función se llama muy a menudo, y la cadena literal sólo se utiliza la mitad del tiempo que se llama :
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
En la primera situación, ¿qué está sucediendo realmente? ¿La cadena acaba de crearse pero no se usa, y nunca se desasigna?
En la segunda situación, ¿la cadena se mantendrá mientras el usuario lo necesite? ¿Qué sucede cuando ya no es necesario ... se liberará esa memoria en ese momento (asumiendo que ya no hay nada que apunte a ese espacio)?
No me malinterpreten, no estoy pensando en utilizar literales de cadena como este. Estoy planeando usar un contenedor para mantener mis cadenas bajo control (probablemente std :: string). En su mayoría solo quiero saber si estas situaciones podrían causar problemas, ya sea para la administración de la memoria o datos corruptos.
Los literales de cadenas C++ son perfectamente seguros y confiables. Son los programadores quienes usan los literales de cadena que no son seguros y confiables. –
Esto es lo que estaba pensando; Solo necesitaba confianza, supongo. Gracias. :) –