gpt4 book ai didi

c++ - delete 和 delete[] 是否等同于基本数据类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:34 27 4
gpt4 key购买 nike

所以在代码审查期间,我的一位同事使用了 double* d = new double[foo]; 然后调用了 delete d。我告诉他们应该将其更改为 delete [] d。他们说编译器不需要基本数据类型。我不同意。

所以我想我可以通过实验来证明我的观点:

#define NUM_VALUES 10000
int main(int argc,char** argv)
{
int i = 0;
while (true)
{
std::cout << i << "|";
double* d = new double[NUM_VALUES];
std::cout << ((void*)d) << std::endl;
for (int j = 0; j < NUM_VALUES; j++)
d[j] = j;

delete d;
i++;
}

return 0;
}

不仅内存占用没有增长,d每次都分配到同一个地方! ( Visual Studio 2010)。这是 visual studio 编译器的怪癖吗?或者这是标准的一部分?

最佳答案

如果你使用new你需要使用delete

如果你使用 new [] 你必须使用 delete []

它们的意思不同。 double* d = new double(); 表示分配构造一个double类型。 delete d; 表示取消分配并销毁单个 double 类型。 double* d = new double[NUM_VALUES]; 表示分配 NUM_VALUES 个 double ,delete [] d 表示未分配 NUM_VALUES 个中的每一个 双倍分配。

关于c++ - delete 和 delete[] 是否等同于基本数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126872/

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