Это правильное использование временной 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() все будет хорошо.

Другие вопросы по тегам