【发布时间】:2017-08-10 11:52:57
【问题描述】:
我无法理解为什么通过new 分配的堆栈中的内存只能通过指针访问,而堆中的内存(静态分配)可以正常访问。
这是否与堆中几乎所有内存都有某种顺序而堆栈中的内存有点随机这一事实有关? (如果我刚才说的是真的。)
动态记忆对我来说似乎如此模糊和神秘,所以任何能帮助我更好地理解它的人都将不胜感激。
【问题讨论】:
-
您似乎对这里的术语感到困惑。您确实应该发布一个您发现不清楚的 code 示例。这样人们就可以向你解释了。
-
这就是new操作符所做的:为你分配一个新对象的内存并创建一个指向它的指针
-
是什么让它看起来“神秘”?这是一个完全确定的和基于规则的过程,即使它的内部运作并不明显。
-
我很确定您已经混淆了堆栈(具有自动生命周期的变量的存储)和堆(具有动态生命周期的变量的存储,通常由
new分配)。 -
@DanailNedkov
new返回一个指针,因此您不能直接将其分配给int。但是,您可以使用int &i = *new int;——但这会特别不习惯。
标签: c++ pointers new-operator dynamic-memory-allocation