盖伊,我很困惑如何在下面的代码片段中释放对象 pResult
inline char* UnicodeToAnsi(const wchar_t* szStr, int& nLen)
{
nLen = WideCharToMultiByte(CP_ACP, 0, szStr, -1, NULL, 0, NULL, NULL);
if (nLen == 0)
return NULL;
char* pResult = new char[nLen];
WideCharToMultiByte(CP_ACP, 0, szStr, -1, pResult, nLen, NULL, NULL);
return pResult;
}
我在以下地址致电:
string region_str(UnicodeToAnsi(regionValue, region_str_len));
在C ++中如果我们用new创建一个对象,我必须手动释放它,但在这种情况下,我必须返回值。如果我发布它,我就不能再使用它了。
我是否需要发布 pResult ?如果有,请告诉我该怎么做。
答案 0 :(得分:2)
必须在delete []
返回的指针上调用UnicodeToAnsi()
。
否则,您将发生内存泄漏。
例如:
char* ansi_str = UnicodeToAnsi(regionValue, region_str_len);
string region_str(ansi_str);
delete [] ansi_str;
但是,正确的C ++解决方案是让UnicodeToAnsi()
返回std::string
并使用它:
string region_str = UnicodeToAnsi(regionValue, region_str_len);