首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >for循环中的delete[]和delete

for循环中的delete[]和delete
EN

Stack Overflow用户
提问于 2013-09-20 18:05:00
回答 7查看 2.4K关注 0票数 0

这样做有什么区别:

代码语言:javascript
复制
int* I = new int[100];
for (int J = 0; J < 100; ++J)
{
    delete I++;
}

//and

int* I = new int[100];
delete[] I;

我知道第一个是错的。我知道如何正确地使用delete[]和delete。我只想知道为什么这些不一样。比如在循环中找出delete[]和delete之间的真正区别。那有什么区别呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-09-20 18:25:49

newdelete的两个版本各有两个任务:分配/解除分配和构造/销毁。

  • new将分配内存并调用构造函数。
  • delete将调用解构函数并释放内存。
  • new []分配单个内存块,然后可能多次调用构造函数。
  • delete []可能多次调用解构函数,然后释放单个内存块。

因此,多次使用delete意味着释放多个内存块,而使用delete[]将释放单个内存块;多次使用delete并不等同于使用delete []

票数 3
EN

Stack Overflow用户

发布于 2013-09-20 18:08:53

区别在于,在第一种情况下,您要删除没有从new返回的指针。

票数 2
EN

Stack Overflow用户

发布于 2013-09-20 18:11:26

没有比较的意义

对所有的deletes使用news

以及适用于所有delete []new []s

第一个简单地删除不来自new的指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18923106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档