c++ - c++中删除变量的详细信息

标签 c++ pointers

我正在尝试了解在 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/

相关文章:

c++ - STL 容器如何销毁对象

c - C语言中的指针混淆

c++ - std::allocator<T>::deallocate 的第二个参数的目的是什么?

c++ - 指向数组的指针更改数组元素的值

c++ - 从 C/C++ 中的函数返回不带静态整数的数组指针

c++ - 指向数组的指针和指向数组第一个元素的指针之间的区别

c++ - 整数到字符串优化函数?

c++ - 使用重新解释转换将结构或类保存到文件

c++ - 复制二维数组 C++

C++11/C++03 和 std::vector 线程安全