Bonjour à tous !
Alors voilà, j'ai une question d'ordre technique. D'habitude, je ne suis pas gêné par l'utilisation des pointeurs, mais là, j'ai été étonné de constater que ce que je connaissais pouvait être remis en doute et j'aimerais bien être fixé sur quelques points.
J'explique ma question avec un exemple qui devrait bien illustrer le problème :
Imaginons 3 objets : Un programme, une Lecteur de données, et une Base de données.
Je crée une instance de programme. puis j'appelle la fonction Read() une première fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 class Program { Program::Program() { myReader = NULL; myBD = NULL; } // Lecture de la BD void Program::Read() { myReader = new Reader(myBD); } private : BD* myBD; Reader* myReader; } class Reader { public : Reader::Reader(BD* bd) { // Initialise la Base de données si elle est nulle if(bd == NULL) bd = new BD(); // Récupère le pointeur _bd = bd; } private : BD* _bd; }
Dans l'idée que je me faisais, l'objet BD pointé est modifié, et un second appel de la fonction Read() ne devrait pas le réinstancier... Même si le Reader est réalloué, la BD elle, n'est pas remise à NULL.
Mais visiblement, je me trompe. Dans mon programme, l'équivalent de mon objet BD est toujours à NULL au second appel de Read...
Comment se fait-il ?
Une idée pour palier le problème ? J'ai pensé à utiliser une référence, mais je suis plus à l'aide (d'habitude) avec les pointeurs, justement parce que j'ai l'habitude de déclarer mes objets une seule et une seule fois pour ne pas surcharger la mémoire.
Partager