指针是否在堆栈或堆中包含动态变量?

时间:2018-08-08 04:54:39

标签: c++

我想弄清楚,我发现大多数来源都令人困惑。

例如,

int *a=new int;

“ a”在堆栈或堆中,“ * a”如何?我发现的大多数资源仅涉及堆,我确实需要一个非常具体的答案。我将非常感谢。

2 个答案:

答案 0 :(得分:7)

a在堆栈中。 a的范围结束时,a不可用。

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

答案 1 :(得分:0)

除了stackheap上的位置之外,您还应该以c ++的方式考虑它,即考虑其storage duration.,例如,全局{{1} }操作符可以重载以执行任何操作。可能要返回的对象不在堆或堆栈上,而是在全局或某些特定的设备内存中创建。

new具有自动存储时间。意思是:

  

对象的存储空间在封闭代码块的开头分配,并在末尾释放。

a创建的对象具有 dynamic 动态存储时间:

  

使用动态内存分配功能,按请求分配和释放对象的存储空间。