c++ - delete[] 与 for 循环中的 delete

标签 c++

<分区>

做和做有什么区别:

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 之间的真正区别一样。那有什么区别呢?

最佳答案

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

  • new 将分配内存并调用构造函数。

  • delete 将调用解构函数并释放内存。

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

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

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

关于c++ - delete[] 与 for 循环中的 delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923106/

相关文章:

c++ - 在 fedora 中运行包含 posix api 的 c++ 程序

c++ - Visual C++ 项目引用的新手帮助

c++ - 有没有一种标准方法来比较 C++ 中的两个范围?

c++ - 是否可以知道整数类型有多少位?

c++ - 如何在 cmd c++ boost::asio 中通过网络在两台或多台计算机之间传输一个字符串?

c++ - 我如何在 C++ 中对包含 double 值的字符串强制执行精度

c++ - C++在运行时嵌套不同类型的查找映射

c++ - 迭代器或指针的 std::enable_if 或 SFINAE

c++ - 如何使用字符串(字符数组)初始化 char 指针而不是整数数组的 int 指针?

c++ - std::lock()定义不正确,无法实现还是没用?