Quão seguros e confiáveis são os literais de cadeia de caracteres C ++?

Então, eu quero entender melhor como os literais de string em C ++ funcionam. Estou preocupado principalmente com situações em que você está atribuindo o endereço de uma string literal a um ponteiro e transmitindo-o. Por exemplo:

char* advice = "Don't stick your hands in the toaster.";

Agora, digamos que eu apenas passe essa string copiando ponteiros durante o programa. Claro, provavelmente não é uma boa ideia, mas estou curioso para saber o que realmente estaria acontecendo nos bastidores.

Para outro exemplo, digamos que criamos uma função que retorna uma string literal:

char* foo()
{
    // function does does stuff
    return "Yikes!"; // somebody's feeble attempt at an error message
}

Agora, digamos que essa função seja chamada com muita frequência, e a string literal é usada apenas cerca da metade do tempo em que é chamada:

// 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();

Na primeira situação, o que realmente está acontecendo? A string é apenas criada, mas não usada, e nunca desalocada?

Na segunda situação, a cadeia será mantida enquanto o usuário achar necessário? O que acontece quando não é mais necessário ... será que a memória será liberada então (supondo que nada aponte para esse espaço)?

Não me interpretem mal, não estou pensando em usar literais de string como este. Estou pensando em usar um contêiner para manter minhas cordas sob controle (provavelmente std :: string). Eu estou apenas querendo saber se essas situações podem causar problemas no gerenciamento de memória ou dados corrompidos.

questionAnswers(2)

yourAnswerToTheQuestion