A propos des pointeurs.[Débutant] - C++ - Programmation
Marsh Posté le 10-05-2005 à 17:25:34
1. oui
2. ca créer 256 pointeurs* qui pointent sur n'importe quoi vu que pas initialisés.
* 4 octets/pointeurs sur PC et avec les compilateurs que j'ai pu utiliser
Marsh Posté le 10-05-2005 à 18:14:09
Merci...
Deux autres petites questions:
L'instruction "delete[] variable;" permet de libérer tous les pointeurs non initialisés ?
Quelle différence y a-il entre ses 2 lignes de code:
classe variable(...paramètres...);
classe *variable = new classe(...paramètres...);
Marsh Posté le 10-05-2005 à 18:16:35
dans le deuxieme cas tu alloue dynamiquement de la mémoire, pas dans le premier
Marsh Posté le 10-05-2005 à 18:25:19
vincent0 a écrit : Merci... |
ca detruit une collection d'objets et libere l'emplacement pointé par 'variable'
Marsh Posté le 10-05-2005 à 18:38:20
vincent0 a écrit : |
non, delete[] désalloue de la mémoire allouée par new[].
Marsh Posté le 10-05-2005 à 18:44:15
Donc si dans un fichier .h j'ai ceci:
classe variable[256];
et dans le fichier .cpp ceci:
variable[0] = new classe(???);
variable[1] = new classe(???);
variable[2] = new classe(???);
....
variable[55] = new classe(???);
je perd 200*4 octets ? Y a-til une solution pour éviter ça ?
Marsh Posté le 11-05-2005 à 20:07:26
Tu n'as pas définit tableau comme un tableau de pointeurs, tu ne peux donc pas faire
variables[0]=new classe(???)
Tu dois pour cela faire classe *variable[256]
Si tu ne veux pas perdre de mémoire, il faut que tu alloue ton tableau de pointeurs dynamiquement lui aussi. Comme ça tu choisit la taille en fonction de tes besoins et tu peux changer cette taille.
Marsh Posté le 12-05-2005 à 00:00:38
ptitchep a écrit : Tu n'as pas définit tableau comme un tableau de pointeurs, tu ne peux donc pas faire |
Toutafé.
Tu devrais faire un truc du genre :
(les tailles supposent qu'un pointeur occupe 4 octets)
Code :
|
Marsh Posté le 12-05-2005 à 00:07:50
une collection de pointeur, il faut que ce soit justifié
std::vector<classe> est plus pratique
Marsh Posté le 12-05-2005 à 19:32:27
Citation : une collection de pointeur, il faut que ce soit justifié |
Tu pourrais détailler stp?
Marsh Posté le 12-05-2005 à 20:17:00
c'est a toi d'expliquer pourquoi
classe** variable;
et pas
classe* variable = new classe[n];
?
Marsh Posté le 12-05-2005 à 20:31:36
parce que
classe* variable=new classe[n]
va créer un pointeur sur un tableau de n objets de type classe, variable[0] sera un objet et non un pointeur donc impossible de faire
variable[0]=new classe(param);
alors que
classe **variable
variable = new classe* [N];
va créer un tableau de N pointeurs sur des objets de type classe
et ensuite on peut faire
variable[0]=new classe(param);
...
variable[n]=new classe(param);
car variable[n] est un pointeur!
Marsh Posté le 12-05-2005 à 20:32:42
c'est quoi
std::vector<classe>
????
Marsh Posté le 12-05-2005 à 20:37:29
C'est un tableau de classe. Jette un coup d'oeil à sa doc...
Marsh Posté le 12-05-2005 à 20:41:13
ptitchep a écrit : c'est quoi |
variable[0]= classe(param);
mais new[] aura deja appelé le constructeur par defaut et l'affectation crée une copie temporaire
tu peux faire
std::vector est un modele de tableau redimensionnable
std::vector<classe> variable;
variable.reserve(n); // alloue sans construire
et n push_back( class(...) ); // toujours copie temporaire
mais classe ** c'est cher payé, je ne connais pas trop C++ mais il doit bien y avoir de meilleur solutions
Marsh Posté le 12-05-2005 à 21:00:23
Moi non plus je connais pas des masses C++ et il est fort possible que ta tech soit mieux.
En cours de C on m'a appris comme ça et j'ai des cours de C++ que depuis 4 semaines (ms je connaissais un peu avant) et le prof nous fait bosser comme ça...
A creuser...
Marsh Posté le 12-05-2005 à 21:46:08
Si tu veux un tableau à 2 dimensions, utilises un vector de vector.
Avec une déclaration du type : vector< vector<int> > matrice;
Pour déclarer un tableau d'int à 2 dimensions.
C'est bien plus facile et plus sûr que les new et delete.
Marsh Posté le 12-05-2005 à 21:55:31
ouai, sauf que vector< vector<int> > si pour une matrice ca sera pas top niveau perf pour les calcul
Marsh Posté le 12-05-2005 à 22:51:12
C'était histoire de donner vie à l'exemple (j'y réfléchirais à 2 fois le prochain coup)... un dico des synonymes avec un vector de vector de string ?
Marsh Posté le 07-06-2005 à 15:58:46
j'ai besoin de faire un tableau à 3 dimensions qui contiendra des pointeurs, et peu importe les perfs, je peux utiliser un vector de vector de vector ????
Marsh Posté le 10-05-2005 à 17:20:23
Bonjour,
Quand on fait "classe variable[256]", ça réserve 256*size(classe) de place mémoire ?
Mais quand on fait "classe *variable[256]", qu'est ce que ça fait exactement ?
Merci d'avance...
Message édité par vincent0 le 12-05-2005 à 10:27:42