从函数返回LPCWSTR?

rem*_*acp 5 c++ unicode visual-studio-2010

为了将整数值传递给SetWindowTextW(),(我在C++中使用unicode构建,使用Visual Studio 2010),这个函数是否足以返回LPCWSTR?我很确定这里有一些我不理解的东西,因为它会返回一个奇怪的值.我知道LPCWSTR是一个空终止的长指针宽字符串,但我仍然认为我错过了什么!?

const LPCWSTR int2LPCWSTR ( int integer )
{
 wstringstream wss;
 wss << integer;
 const wstring& wstr = wss.str();
 const LPCWSTR p = wstr.c_str();
 return p;
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*Par 9

LPCWSTR从函数返回a 本身并没有错.然而,出现的一般问题是围绕返回值的内存管理.A LPCWSTR通常保存在分配的内存中,因此需要在调用者和被调用者之间理解该内存的所有权.

我不想挑选你的样品,但这是一个很好的例子,说明返回的问题LPCWSTR.字符串的内存由wss函数本地的实例保存.一旦函数返回,内存就会在析构函数中释放wss,从而使返回值无效.

如果您已经在使用C++,那么我的推荐就是直接返回std::stringwstring直接消除关于谁拥有已分配内存的混淆.

wstring int2LPCWSTR ( int integer )
{
 wstringstream wss;
 wss << integer;
 return wss.str();
}
Run Code Online (Sandbox Code Playgroud)

或者,如果复制值是一个问题,请通过引用返回它.

void int2LPCWSTR ( int integer, wstring& value )
{
 wstringstream wss;
 wss << integer;
 value = wss.str();
}
Run Code Online (Sandbox Code Playgroud)