Итак, я хочу лучше понять, как работают строковые литералы в 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). В основном я просто хочу знать, могут ли эти ситуации вызвать проблемы с управлением памятью или повреждением данных.