gpt4 book ai didi

c++ - 从函数返回 LPCWSTR?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:03 25 4
gpt4 key购买 nike

为了将整数值传递给 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;
}

最佳答案

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

我不想挑剔你的示例,但它是一个很好的例子,说明返回 LPCWSTR 可能会出现什么问题。字符串的内存由函数本地的 wss 实例保存。一旦函数返回,内存就会在 wss 的析构函数中被释放,从而使返回值无效。

如果您已经在使用 C++,我的建议是直接返回 std::stringwstring 以消除关于谁拥有分配的内存的混淆。

wstring int2LPCWSTR ( int integer )
{
wstringstream wss;
wss << integer;
return wss.str();
}

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

void int2LPCWSTR ( int integer, wstring& value )
{
wstringstream wss;
wss << integer;
value = wss.str();
}

关于c++ - 从函数返回 LPCWSTR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4379696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com