我希望得到一些明确的信息,我发现大多数消息来源都令人困惑。
例如,
int *a=new int;
堆栈或堆中的“a”,以及“* a”怎么办?我发现的大多数资源只涉及堆,我真的需要一个非常具体的答案。我真的很感激。
a
在筹码中。当a
的范围结束时,a
不可用。
*a
在堆里。即使在a
的范围结束之后,a
指向的对象仍将继续存在,除非在此之前释放内存。
除了在stack
或heap
上的哪个地方,你应该用c ++的方式思考它,那就是考虑它的storage duration.例如,全局的new
算子可以超载来做任何事情。也许您返回的对象不在堆或堆栈上,而是在全局或某些特定设备内存中创建。
a
有自动存储时间。意思是:
对象的存储在封闭代码块的开头分配,并在最后解除分配。
new int
创建的对象具有动态存储持续时间:
通过使用动态内存分配函数,按请求分配和释放对象的存储。