return之后如何释放char数组呢?

How to release the char array after return it?

伙计,我在下面的代码片段

中混淆了如何释放对象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创建一个对象,我必须手动释放它,但在这种情况下,我必须return这个值。如果我释放它,我就不能再使用它了。

我需要释放 pResult 吗?如果是,请告诉我该怎么做。

必须UnicodeToAnsi()编辑的指针return上调用delete []

否则会发生内存泄漏。


例如:

char* ansi_str = UnicodeToAnsi(regionValue, region_str_len);
string region_str(ansi_str);
delete [] ansi_str;

但是,正确的 C++ 解决方案是将 UnicodeToAnsi() return 设为 std::string 并使用它:

string region_str = UnicodeToAnsi(regionValue, region_str_len);