堆上分配了变量吗?

时间:2019-05-16 07:14:45

标签: c++ memory-management

我对内存分配主题进行了测验,这个问题使我感到困惑,因为我对答案不满意。 (the Question

据我了解,我们可以在堆上创建“ 对象”,方法是创建一个指针变量,以指向我们在堆上分配的内存(使用{ {1}}关键字。

例如:

new

变量double* a = new double(-1.0f); 是一个指针,在指向堆栈的内存的 Stack 点上创建。因此,实际上说a是在堆上分配是错误的。我的理解是正确的吗?

2 个答案:

答案 0 :(得分:17)

a是具有自动存储持续时间的指针。

指向指向具有动态存储持续时间double

在丢失指向动态内存的指针之前,调用delete a; 是您的工作;通常在a超出范围时。

(从非正式的角度来讲,谈到C ++的典型实现,您可以说a在堆栈上,它指向堆上的内存。)

答案 1 :(得分:4)

您似乎已经了解了。堆*上有一个浮点数,而堆栈*上有一个指针。对于您如何引用浮点数,分歧只是“命名”约定。

有些人用要做的事情谈论所指的事情。我倾向于同意您的意见:这可能会造成混乱,并可能增加复杂性。

但是为了公平起见:请记住,不同的人使用语言的动机不同。如果您永远不想处理指针,而它们只是让变量保留在其范围之外的一种方式,那么将(* a)作为变量并记住它遵循略有不同的规则并不是完全没有优点的。

[*]模语法/标准nazisim。