【问题标题】:Is the pointer holding dynamic variable in the stack or heap?指针是否在堆栈或堆中保存动态变量?
【发布时间】:2019-01-15 06:10:24
【问题描述】:

我想弄清楚我发现大多数来源都很混乱。

例如,

int *a=new int;

“a”是在堆栈还是堆中,“*a”呢?我发现的大多数资源只涉及堆,我真的需要一个非常具体的答案。我将不胜感激。

【问题讨论】:

标签: c++


【解决方案1】:

a 在堆栈中。当a的作用域结束时,a就不能使用了。

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

【讨论】:

  • 如果全局 new 已被重载以获取内存并在与堆不同的位置构造对象怎么办?
【解决方案2】:

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

a 具有自动 存储期限。这意味着:

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

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

使用动态内存分配函数为每个请求分配和释放对象的存储空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 2012-10-07
    • 1970-01-01
    • 2020-01-03
    • 2015-11-16
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多