gpt4 book ai didi

c++ - 我是否需要释放使用 'new' 时分配的 wchar 内存,或者 delete[] 是否也释放它?

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:41 25 4
gpt4 key购买 nike

试图找到释放内存的正确方法,但我找不到明确的答案。我确定它就在那里,但我似乎找不到它而且我有点困惑。

这就是我正在做的。我从 sUsers 创建一个新的 sStructUsers,然后我为用户名分配内存

    struct sStructUsers 
{
TCHAR *sName;
};

sStructUsers *sUsers = new sStructUsers[TOTALUSERS]();

// Allocate memory for the TCHARs in sStruct
for (INT k = 0; k < TOTALUSERS; k++)
{
sUsers [k].sName = (TCHAR*)calloc(128,sizeof(TCHAR))
}

接下来,我对 sName 成员做任何我需要做的工作

    // do work here

现在,要进行清理,我应该这样做吗:

    delete[] sUsers;

或者我应该这样做吗?

    for (INT k = 0; k < TOTALUSERS; k++)
{
free(sUsers[k].sName);
}
delete[] sUsers?

我不确定我是否需要释放内存或者 delete[] 是否会处理它?<​​/p>

最佳答案

不要使用 new如果你能帮忙的话。大多数情况下在现代 C++ 中 new不需要。您可以使用 std::vector , std::array , std::string (std::basic_string<TCHAR> 可能),std::unique_ptrstd::shared_ptr .

如果你觉得你真的需要使用 new ,创建一个特殊的类来处理这个。 IE。例如制作new在构造函数和 delete在析构函数中。

当然,正如评论中所说,永远不要将 new/delete 与 malloc/free 混为一谈。根本不需要在 C++ 中使用这些函数,因为这是 C 的残余。

编辑:添加示例,说明类本身如何处理。

struct sStructUsers 
{
const int MAX_NAME_SIZE = 128;
sStructUsers()
{
sName = new TCHAR[MAX_NAME_SIZE];
}
~sStructUsers()
{
delete sName;
}
TCHAR *sName;
};

那么在使用这个类时你不需要任何初始化/清理。

请注意,您通常甚至不需要这样做,您可以这样定义您的类:

struct sStructUsers 
{
std::basic_string<TCHAR> sName;
};

并且有完整的string功能免费。或者像这样,如果你真的需要一个指针:

struct sStructUsers 
{
const int MAX_NAME_SIZE = 128;
sStructUsers() : sName(new TCHAR[MAX_NAME_SIZE]) {}
std::unique_ptr<TCHAR[]> sName;
};

或者,正如我之前提到的,使用其他标准容器。

关于c++ - 我是否需要释放使用 'new' 时分配的 wchar 内存,或者 delete[] 是否也释放它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56868467/

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