Нет ничего плохого в возврате LPCWSTR
из функции. Однако возникает общая проблема, связанная с управлением памятью вокруг возвращаемого значения. LPCWSTR
обычно хранится в выделенной памяти, поэтому необходимо понимать владение этой памятью между вызывающим и вызываемым абонентом.
Я не хочу выбирать ваш образец, но это хороший пример того, что может пойти не так с возвратом LPCWSTR
. Память для строки хранится экземпляром wss
, который является локальным для функции. Как только функция возвращает, память освобождается в деструкторе wss
и, следовательно, делает недействительным возвращаемое значение.
Если вы уже используете C ++, я рекомендую просто вернуть std::string
или wstring
напрямую, чтобы избежать путаницы в том, кто владеет выделенной памятью.
wstring int2LPCWSTR ( int integer )
{
wstringstream wss;
wss << integer;
return wss.str();
}
Или, если копирование значения является проблемой, верните его по ссылке.
void int2LPCWSTR ( int integer, wstring& value )
{
wstringstream wss;
wss << integer;
value = wss.str();
}