为了将一个整数值传递给SetWindowTextW() (我在Visual Studio2010的C++中使用unicode构建),这个函数返回一个LPCWSTR就足够了吗?我很确定这里有一些我不理解的东西,因为它返回一个奇怪的值。我知道LPCWSTR是一个以null结尾的长指针宽字符串,但我仍然认为我遗漏了一些东西!
const LPCWSTR int2LPCWSTR ( int integer )
{
wstringstream wss;
wss << integer;
const wstring& wstr = wss.str();
const LPCWSTR p = wstr.c_str();
return p;
}发布于 2010-12-08 01:36:26
从函数返回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();
}发布于 2010-12-08 01:36:25
你不能这么做。
返回wstring,然后使用c_str()获取LPCWSTR并将其传递给SetWindowTextW
发布于 2010-12-08 01:35:29
wstr拥有.c_str()的返回值。当wstr在函数末尾被析构时,p将成为无效指针。
https://stackoverflow.com/questions/4379696
复制相似问题