有关在c ++中删除变量的详细信息

zep*_*hyr 1 c++ pointers

我试图准确理解c ++中删除的变量会发生什么.假设我有以下内容.

MyObject * obj;

for (int i = 0; i < 100000000; i++){
    obj = someMethodThatReturnsNewMyObject();
    obj->doSomething();
    delete obj;
}
Run Code Online (Sandbox Code Playgroud)

现在,在实例化时,obj是一个指向MyObject对象的指针.它首先由该线初始化obj = someMethodThatReturnsNewMyObject();.然后一些方法被称为只是为了好玩,并被obj删除.现在我知道当像这样删除某些东西时,它指向的内存空间被清除,指针被设置为什么都没有.

但是,当for循环回来时,我重新初始化指针,导致它分配一个新的内存空间,obj然后指向这个新的空间.但是,指针本身从内存中移除了.在整个循环过程中,它只指向我指出的任何指向或指向任何东西(删除时).

那么我的问题是:指针本身是什么时候,即指针占用的内存空间,什么时候被删除?为什么我不需要删除它,如果我需要删除指向的内存?

5go*_*der 5

指针(变量obj)具有自动存储持续时间 - 就像变量一样i.编译器将发出代码以自动为这样的变量分配内存,并在超出范围时释放它; 在调用任何析构函数之后.这个内存将在运行时来自堆栈,这使得分配和释放非常快.

顺便说一句,调用delete obj没有 "设置指针指向什么".至少如果你的意思是指针被修改.它将继续具有之前的任何值,但该值将不再指向有效的内存位置.