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)
LPCWSTR
从函数返回a 本身并没有错.然而,出现的一般问题是围绕返回值的内存管理.A LPCWSTR
通常保存在分配的内存中,因此需要在调用者和被调用者之间理解该内存的所有权.
我不想挑选你的样品,但这是一个很好的例子,说明返回的问题LPCWSTR
.字符串的内存由wss
函数本地的实例保存.一旦函数返回,内存就会在析构函数中释放wss
,从而使返回值无效.
如果您已经在使用C++,那么我的推荐就是直接返回std::string
或wstring
直接消除关于谁拥有已分配内存的混淆.
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)