OVH Cloud OVH Cloud

[debutant] mecanisme memoire

2 réponses
Avatar
pasde.bcausse.spam
bonsoir,

j'ai 3 classes A B et C

B a deux variables A.
et C un pointeur de tableau de B.

dans le constructeur de C j'ai

ptrB = new B[n];

donc je cree dans le tas un tableau de pointeur de B.

maintenant il faut que je cree les B.

je cree un A par

A = {....} donc dans la pile?

et par recopie:

for(int = 0; i<n; i++) {
ptrB[i].premier = A;
ptrB[i].deuxieme = A;
}

ou sont les B (je supose dans le tas, mais pourquoi?)

puis que va t'il se passer quand delete[] ptrB?

qui peux m'expiquer les mecanismes.


--
Bruno Causse
http://perso.wanadoo.fr/othello

2 réponses

Avatar
Loïc Joly
bonsoir,

j'ai 3 classes A B et C

B a deux variables A.
et C un pointeur de tableau de B.

dans le constructeur de C j'ai

ptrB = new B[n];

donc je cree dans le tas un tableau de pointeur de B.


Non, tu crées n objet de type B consécutifs en mémoire, et tu récupère
un pointeur sur le premier d'entre eux.

maintenant il faut que je cree les B.

je cree un A par

A = {....} donc dans la pile?

et par recopie:

for(int = 0; i<n; i++) {
ptrB[i].premier = A;
ptrB[i].deuxieme = A;
}


Là, tu ne crées pas les B. Tu modifies les B existants pour leur mettre
des valeurs raisonables dans les champs premier et deuxième.


ou sont les B (je supose dans le tas, mais pourquoi?)

puis que va t'il se passer quand delete[] ptrB?


Les B seront détruits. Et en conséquence, les A qu'ils contiennent aussi.


J'espère que ça clarifie un peu...

--
Loïc

Avatar
pasde.bcausse.spam
Loïc Joly wrote:

Non, tu crées n objet de type B consécutifs en mémoire, et tu récupère
un pointeur sur le premier d'entre eux.


oui, :-) il est tard. je ferais mieux d'aller au lit.
--
Bruno Causse
http://perso.wanadoo.fr/othello