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

问题描述 投票:2回答:2

我希望得到一些明确的信息,我发现大多数消息来源都令人困惑。

例如,

int *a=new int;

堆栈或堆中的“a”,以及“* a”怎么办?我发现的大多数资源只涉及堆,我真的需要一个非常具体的答案。我真的很感激。

c++
2个回答
7
投票

a在筹码中。当a的范围结束时,a不可用。

*a在堆里。即使在a的范围结束之后,a指向的对象仍将继续存在,除非在此之前释放内存。


0
投票

除了在stackheap上的哪个地方,你应该用c ++的方式思考它,那就是考虑它的storage duration.例如,全局的new算子可以超载来做任何事情。也许您返回的对象不在堆或堆栈上,而是在全局或某些特定设备内存中创建。

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

对象的存储在封闭代码块的开头分配,并在最后解除分配。

new int创建的对象具有动态存储持续时间:

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

© www.soinside.com 2019 - 2024. All rights reserved.