J'ai eu un quiz sur le sujet de l'allocation de mémoire, et cette question est venue qui m'a dérouté car je ne suis pas satisfait des réponses. ( la question )
Comme je l'ai appris, nous pouvons créer un " objet " sur le tas en créant une variable de pointeur pour pointer vers la mémoire que nous avons allouée sur le tas (en utilisant le mot clé new
).
Pour un exemple spécifique:
double* a = new double(-1.0f);
La variable a
est un pointeur et est créée sur le point Stack vers une mémoire sur le tas. Donc, en fait, dire que a
est alloué sur le tas est faux. Ma compréhension est-elle correcte?
Vous semblez avoir compris. Il y a un flotteur sur le tas * et un pointeur sur la pile *. Le désaccord est "juste" une convention de dénomination pour la façon dont vous vous référez au flottant.
Certaines personnes parlent des choses qui sont pointées du doigt en termes de la chose qui fait le pointage. Je suis enclin à être d'accord avec vous: cela prête à confusion et peut ajouter de la complexité.
Cependant, dans un souci d'équité: gardez à l'esprit que différentes personnes ont des motivations différentes pour la façon dont elles utilisent la langue. Si vous ne voulez jamais traiter des pointeurs et qu'ils ne sont qu'un moyen de faire persister une variable en dehors de sa portée, voir (* a) comme variable et se souvenir qu'elle obéit à des règles légèrement différentes n'est pas complètement sans mérite.
[*] Modulo grammaire/normes nazisim.
a
est un pointeur avec durée de stockage automatique.
Il pointe vers un double
qui a durée de stockage dynamique.
C'est votre travail d'appeler delete a;
avant vous perdez un pointeur vers la mémoire dynamique; généralement lorsque a
sort de la portée.
(De manière informelle, et en parlant des implémentations typiques de C++, vous pouvez dire que a
est sur la pile et qu'il pointe vers la mémoire sur le tas.)