指针是否在堆栈或堆中保存动态变量?

18 浏览
0 Comments

指针是否在堆栈或堆中保存动态变量?

我想把我发现大多数资料都很令人困惑的问题搞清楚。

例如,

int *a=new int;

\"a\"是在堆中还是栈中,\"*a\"又是什么情况?我发现很多资料只提到了堆,我真的需要一个非常具体的答案。我会非常感激的。

admin 更改状态以发布 2023年5月24日
0
0 Comments

除了在stackheap中的位置,您应该以C++的方式思考它,也就是通过考虑其存储期限来思考。例如,全局new运算符可以被重载以执行任何操作。可能您得到的对象不在堆或栈上,而是在全局或某些特定设备内存中创建。

a的存储期限为自动存储期。这意味着:

对象的存储空间在封闭代码块的开始时分配,并在结束时释放。

new int创建的对象具有动态存储期:

通过使用动态内存分配函数,对象的存储空间会按请求分配和释放。

0
0 Comments

a在堆栈中。当a的作用域结束时,a不可用。

*a在堆中。即使a的作用域结束,a指向的对象仍然存在,除非在此之前内存被释放。

0