std::wstring originalString;
是函数体内的局部变量GetWCharTStar
。
一旦你离开GetWCharTStar()
函数的作用域,这个局部变量就会被破坏,你返回的指针不再有效。
以下代码最终可能会起作用:
const wchar_t *StringManager::GetWCharTStar(int stringId)
{
const std::wstring& originalString = StringManager::GetString(stringId);
const wchar_t *retStr = originalString.c_str();
return retStr;
}
提供StringManager::GetString()
返回参考:
const std::wstring& StringManager::GetString(int stringId);
但是,这仍然是有风险的,因为它假定您的StringManager
类管理的字符串永远不会在内存中重新定位。例如,如果StringManager
在一个 then 的帮助下实现,std::vector
一旦向量需要扩展,它之前的内容就会被复制到更大的内存块中的其他地方,最终你会持有一个不再存在的对象的引用。
换句话说,避免将句柄返回到内部数据。