我对内存分配主题进行了测验,这个问题使我感到困惑,因为我对答案不满意。 (the Question)
据我了解,我们可以在堆上创建“ 对象”,方法是创建一个指针变量,以指向我们在堆上分配的内存(使用{ {1}}关键字。
例如:
new
变量double* a = new double(-1.0f);
是一个指针,在指向堆栈的内存的 Stack 点上创建。因此,实际上说a
是在堆上分配是错误的。我的理解是正确的吗?
答案 0 :(得分:17)
a
是具有自动存储持续时间的指针。
它指向指向具有动态存储持续时间的double
。
在丢失指向动态内存的指针之前,调用delete a;
是您的工作;通常在a
超出范围时。
(从非正式的角度来讲,谈到C ++的典型实现,您可以说a
在堆栈上,它指向堆上的内存。)
答案 1 :(得分:4)
您似乎已经了解了。堆*上有一个浮点数,而堆栈*上有一个指针。对于您如何引用浮点数,分歧只是“命名”约定。
有些人用要做的事情谈论所指的事情。我倾向于同意您的意见:这可能会造成混乱,并可能增加复杂性。
但是为了公平起见:请记住,不同的人使用语言的动机不同。如果您永远不想处理指针,而它们只是让变量保留在其范围之外的一种方式,那么将(* a)作为变量并记住它遵循略有不同的规则并不是完全没有优点的。
[*]模语法/标准nazisim。