【发布时间】:2011-03-17 20:41:39
【问题描述】:
我正在玩一些内存动态分配,但我不明白。当使用new 语句分配一些内存时,我应该能够使用delete 销毁指针指向的内存。
但是当我尝试时,这个delete 命令似乎不起作用,因为指针指向的空间似乎没有被清空。
让我们以这段真正基本的代码为例:
#include <iostream>
using namespace std;
int main()
{
//I create a pointer-to-integer pTest, make it point to some new space,
// and fulfill this free space with a number;
int* pTest;
pTest = new int;
*(pTest) = 3;
cout << *(pTest) << endl;
// things are working well so far. Let's destroy this
// dynamically allocated space!
delete pTest;
//OK, now I guess the data pTest pointed to has been destroyed
cout << *(pTest) << endl; // Oh... Well, I was mistaking.
return 0;
}
有什么线索吗?
【问题讨论】:
-
是的,一个菜鸟quieston,但不是一个微不足道的。
-
标准定义的“破坏”关注对象何时变得无法使用,在运行类作者编写的任何清理代码之后。它不是指清理对象以前占用的内存,类作者/用户没有请求,因此会浪费时间。
-
如果你想破坏内存,用螺丝刀撬开主板上的芯片。
delete所做的就是允许将内存分配给其他东西。它可能会或可能不会更改存储在实际位中的值。但是使用指向已删除对象的指针读取这些位会导致 未定义的行为
标签: c++ memory new-operator delete-operator