当删除或删除[]被执行时,计算机会做什么?

What does computer do when delete or delete[] is excuted?

本文关键字:删除 计算机 计算 机会 什么 执行      更新时间:2023-10-16

那里!我是 c++ 的新手,遇到了删除指向数组的指针的问题。如果您搜索"如何正确删除指向数组的指针",之前也有类似的问题。它的结论是,坚持使用newdelete是一个好习惯。如果你用new <data-type> []来分配妈妈,delete[]应该随之而来。

我对这个答案不满意。当deletedelete[]被执行时,计算机会做什么?所以,我试过这个。

#include <iostream>
using namespace std;
int main()
{
int* pvalue = NULL;
pvalue = new int[3]; 
cout << "address of pvalue:" << pvalue << endl;
for (int i = 0; i < 3; ++i)
{
*(pvalue+i) = i+1;
}
for (int i = 0; i < 3; ++i)
{
cout << "Value of pvalue : " << *(pvalue+i) << endl;
}
delete pvalue;
cout << "address of pvalue:" << pvalue << endl;
for (int i = 0; i < 3; i++)
{
cout << "Value of pvalue : " << *(pvalue+i) << endl;
}
return 0;
}

输出为:

address of pvalue:0x150e010
Value of pvalue : 1
Value of pvalue : 2
Value of pvalue : 3
address of pvalue:0x150e010
Value of pvalue : 0
Value of pvalue : 0
Value of pvalue : 3

该指针的地址没有像我预期的那样NULL,并且只删除了两个值。 如果我将delete pvalue替换为delete [] pvalue,我希望数组的所有三个值都被删除。但是,结果是一样的。

  • delete pvalue是否告诉计算机此地址是免费的 在其他地方使用,实际上不会更改地址 pvalue 成立?
  • delete pvaluedelete [] pvalue是否会更改指针指向的值?
  • delete pvaluedelete [] pvalue有什么区别?似乎他们的行为是一样的。
  • "delete pvalue"是否告诉计算机此地址可以在其他地方免费使用,并且实际上并没有更改该地址 pvalue 持有?

是的。 正是这个。

">
  • 删除 pvalue"或"delete [] pvalue"是否会更改指针指向的值?

在您展示的非常简单的情况下,没有。 通常,将调用指向值的析构函数。 这可能会也可能不会更改值。 最后(这很重要),有效的C++程序无法分辨 - 一旦你调用了delete,检查值是未定义的行为。 (未定义的行为意味着任何事情都可能发生 - 包括"你错误地期望什么"。

"删除
  • pvalue"和"删除 [] pvalue"有什么区别?似乎他们的行为是一样的。

区别在于new分配的内存必须由delete删除,而new[]分配的内存必须由delete[]删除。 对于某些实现,根本没有区别。 对于其他人,在new[]分配的内存上使用delete将无法运行析构函数。 对于其他人,您的程序可能会停止。

"delete pvalue"是否告诉计算机此地址可以在其他地方免费使用,并且实际上并没有更改该地址 pvalue 成立?

是的

">

删除 pvalue"或"delete [] pvalue"是否会更改指针指向的值?

它可以调用对象/对象的析构函数

"删除

pvalue"和"删除 [] pvalue"有什么区别?似乎他们的行为是一样的。

一个删除一个对象,另一个删除对象数组。