Это правильное использование временной std::string?
std::string getMyString() { return <make a string>; }
...
HANDLE something = OpenSomething(getMyString().c_str(), ...);
Я прочитал " Гарантированное время жизни временного" в C++ и считаю, что временная строка будет жить до тех пор, пока не будет выполнена оценка, то есть достаточно долго, чтобы сделать эту работу ожидаемой.
Однажды столкнувшись с std::string
пожизненная ошибка (не помню, что это было) Я бы лучше перепроверить...
3 ответа
Да, это нормально.:-)
Строка будет уничтожена в конце оператора, в точке с запятой.
Деструктор для временного объекта не будет вызываться до тех пор, пока не вернется вызов функции, поэтому то, что мы видим здесь, безопасно.
Однако, если вызываемая функция сохраняет char*
и это в конечном итоге используется как-то после OpenSomething
вернулся, то это один прекрасный висячий указатель.
Если вы не используете какой-либо другой аргумент OpenSomthing
для возврата указателя на getMyString.c_str()
все будет хорошо.