我正在尝试了解在 C++ 中删除的变量究竟会发生什么。假设我有如下内容。
MyObject * obj;
for (int i = 0; i < 100000000; i++){
obj = someMethodThatReturnsNewMyObject();
obj->doSomething();
delete obj;
}
现在,在实例化时,obj
是指向 MyObject
对象的指针。它首先由 obj = someMethodThatReturnsNewMyObject();
行初始化。然后调用一些方法只是为了好玩,obj
被删除。现在我知道当像这样删除某些东西时,它指向的内存空间被删除,并且指针设置为指向空。
但是,当 for 循环回来时,我重新初始化指针,导致它分配一个新的内存空间,然后 obj
指向这个新空间。但是,指针本身并没有从内存中删除。在整个循环中,它只指向我告诉它指向的任何内容或不指向任何内容(在删除时)。
那么我的问题是:指针本身,即指针占用的内存空间,什么时候被删除,如果我需要删除内存指向?
最佳答案
指针(变量obj
)有automatic storage duration – 就像变量 i
一样。编译器将发出代码自动为这样的变量分配内存,并在超出范围时释放它;在调用任何析构函数之后。此内存将在运行时来自堆栈,这使得分配和释放速度非常快。
顺便说一下,调用delete obj
不是“将指针设置为指向空”。至少如果你的意思是指针被修改了。它将继续具有之前的任何值,但该值将不再指向有效的内存位置。
关于c++ - c++中删除变量的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30358122/