我希望澄清一些我发现大部分来源都很令人困惑的内容。
例如,
“a”在栈或堆中,而“*a”呢?大多数资料都只提到了堆,我需要一个非常具体的答案。如果您能帮我解决这个问题,我将不胜感激。
例如,
int *a=new int;
“a”在栈或堆中,而“*a”呢?大多数资料都只提到了堆,我需要一个非常具体的答案。如果您能帮我解决这个问题,我将不胜感激。
int *a=new int;
a
在堆栈中。当a
的作用域结束时,a
不能再使用。
*a
在堆中。即使a
的作用域结束,a
指向的对象仍然存在,除非在此之前释放了内存。new
已经被重载以在不同于堆的位置获取内存并构造对象,那该怎么办? - Fantastic Mr Foxnew
运算符可以被重载为执行任何操作。也许你得到的对象不在堆或栈上,而是在全局或某些特定设备内存中创建的。
a
具有自动存储期。这意味着:
由对象的存储空间在封闭代码块的开头分配,并在结尾处释放。
new int
创建的对象具有动态存储期:
通过使用动态内存分配函数按请求分配和释放对象的存储空间。
*a
,栈上存a
。 - Gaurav Sehgala
的位置。它也可能是一个全局变量。 - MSalters