Насколько безопасны и надежны строковые литералы C ++?

Итак, я хочу лучше понять, как работают строковые литералы в C ++. В основном меня интересуют ситуации, когда вы назначаете адрес строкового литерала указателю и передаете его. Например:

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

Теперь допустим, что я просто передаю эту строку, копируя указатели на время работы программы. Конечно, это, вероятно, не очень хорошая идея, но мне интересно, что на самом деле происходит за кулисами.

Для другого примера, скажем, мы создаем функцию, которая возвращает строковый литерал:

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

Теперь предположим, что эта функция вызывается очень часто, а строковый литерал используется только наполовину:

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

В первой ситуации, что на самом деле происходит? Строка только что создана, но не используется и никогда не освобождается?

Во второй ситуации, будет ли эта строка сохраняться, пока пользователь находит в этом необходимость? Что происходит, когда в этом больше нет необходимости ... будет ли тогда освобождена эта память (при условии, что ничто больше не указывает на это пространство)?

Не поймите меня неправильно, я не планирую использовать строковые литералы, подобные этому. Я планирую использовать контейнер для проверки моих строк (возможно, std :: string). В основном я просто хочу знать, могут ли эти ситуации вызвать проблемы с управлением памятью или повреждением данных.

Ответы на вопрос(2)

Ваш ответ на вопрос