Если ConsumeString не выполняет асинхронную обработку const char*
, предоставленного ему (прямо или косвенно), этот код очень безопасен.
Временный объект, возвращенный GetString()
, будет активен до тех пор, пока функция ConsumeString
не вернет , так что, если все дело в аргументе перед возвратом, все будет работать правильно.
В другом сценарии - я полагаю, у вас было что-то вроде этого:
const char* s = GetString().c_str(); // 1
ConsumeString(s); // 2
временно возвращенный GetString
, был уничтожен после завершения строки 1, поэтому ConsumeString
использовал недопустимый указатель.
Для более формальной формулировки относительно времени жизни временного объекта можно обратиться к cppreference , в частности
Все временные объекты уничтожаются на последнем этапе оценки полного выражения, которое (лексически) содержит точку, в которой они были созданы, и если было создано несколько временных объектов, они уничтожаются в порядок противоположный порядку создания.