Функция C ++, когда удаляется возвращаемое значение? - PullRequest
1 голос
/ 26 сентября 2019

У меня есть следующий код на c ++.

string getName()
{
    return "C++";
}

void printName(const char* name)
{
    cout << name << endl;
}

int main()
{
    printName(getName().c_str());
}

Функция getName возвращает string.Я передаю указатель c_str функции string на printName.Я хочу знать, будут ли возвращенные значения string удалены до вызова функции printName().Если нет, то когда удаляется возвращаемое значение.

Ответы [ 2 ]

4 голосов
/ 26 сентября 2019

временное будет уничтожено после полного выражения.

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

Временный объект, созданный getName(), будет уничтожен после полного выражения, котороевключает в себя выполнение printName(), указатель, полученный из c_str, остается действительным внутри printName().

2 голосов
/ 26 сентября 2019

В данном примере последовательность выполнения будет такой:

  1. getName() будет выполнено и вернет строку.

  2. Ссылка на возвращаемую строку будет использоваться функцией c_str().

  3. наконец printName будет выполнен, затем возвращаемый объект будет уничтожен, возвращаемое значение не будет уничтожено до printName выполнения этой функции.

Поскольку полное выражение будет выполняться в лексическом порядке, а временные созданные объекты будут уничтожены после окончания области действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...