Есть ли переменная, выделенная в куче?

У меня был тест на тему распределения памяти, и этот вопрос натолкнул меня на смущение, так как я не удовлетворен ответами. (вопрос)

Как я узнал, мы можем создать " Объект " в Heap, создав переменную-указатель, указывающую на память, выделенную для нас в Heap (используя new ключевое слово).

Для конкретного примера:

double* a = new double(-1.0f); 

Переменная a является указателем и создается в точке стека для памяти в куче. Так на самом деле, говоря выделяется в куче не так. a Мое понимание верно?

Ответ 1

a - указатель с автоматической продолжительностью хранения.

Это указывает на double который имеет динамическую продолжительность хранения.

Это ваша работа, чтобы позвонить delete a; прежде чем потерять указатель на динамическую память; как правило, когда выпадает из сферы. a

(Неформально говоря, говоря о типичных реализациях C++, вы можете сказать, что a находится в стеке и указывает на память в куче.)

Ответ 2

Вы, кажется, поняли. В куче есть поплавок * и указатель на стек *. Разногласия "просто" соглашение об именах для того, как вы относитесь к float.

Некоторые люди говорят о вещах, на которые указывают, с точки зрения того, что делает указание. Я склонен согласиться с вами: это может привести к путанице и может добавить сложности.

Однако в интересах справедливости: имейте в виду, что разные люди по-разному мотивируют использование языка. Если вы никогда не хотите иметь дело с указателями, и они являются просто способом сохранения переменной за пределами ее области видимости, тогда видение (* a) переменной и запоминание того, что она подчиняется немного другим правилам, не совсем бесполезно.

[*] По модулю грамматика/стандарты назим.