我想弄清楚,我发现大多数来源都令人困惑。
例如,
int *a=new int;
“ a”在堆栈或堆中,“ * a”如何?我发现的大多数资源仅涉及堆,我确实需要一个非常具体的答案。我将非常感谢。
答案 0 :(得分:7)
a
在堆栈中。 a
的范围结束时,a
不可用。
*a
在堆中。即使a
的作用域结束后,a
指向的对象仍然存在,除非在此之前释放了内存。
答案 1 :(得分:0)
除了stack
或heap
上的位置之外,您还应该以c ++的方式考虑它,即考虑其storage duration.,例如,全局{{1} }操作符可以重载以执行任何操作。可能要返回的对象不在堆或堆栈上,而是在全局或某些特定的设备内存中创建。
new
具有自动存储时间。意思是:
对象的存储空间在封闭代码块的开头分配,并在末尾释放。
由a
创建的对象具有 dynamic 动态存储时间:
使用动态内存分配功能,按请求分配和释放对象的存储空间。