Bonsoir à tous,
J'ai trouvé un cas de mise en pratique de mes toutes petites connaissances en C++, c'est l'occasion pour moi de m'en servir et surtout de progresser dans la maitrise de ce langage.
Plusieurs cours ont déjà été décortiqués mais j'ai encore du mal à faire des choix solides entre pointeurs et variables, allocation statique et allocation dynamique.
Je souhaite surtout faire de l'objet, le plus rapidement possible.
A première vue, et pour reproduire un comportement qui m'est familier avec des langages de bien plus haut niveau, je serais tenté de faire du "tout pointeur". Des attributs de mes classes aux paramètres qu'acceptent mes méthodes.
Cependant, si mes attributs (privés) sont des pointeurs et que mes getters/setters acceptent aussi des pointeurs, on va vite se retrouver avec ce que je crois être un gros problème de fiabilité.
Soit ce code :
On parvient à modifier un élément qui est pourtant privé.
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 class A { private: std::string *_attrib; public: std::string *getVal(void) const; public: void setVal (std::string *val); } std::string *A::getVal (void) const { return this->_attrib; } void A::setVal (std::string *val){ this->_attrib = val; } main (){ std::string str1 = "test..."; A *obj = new A(); obj->setVal(&str1); str1.erase(4, 3); cout << *obj->getVal() << endl; // Doit afficher "test" au lieu de "test..." }
J'hésite vraiment entre ce risque là (avec des liaisons parfois franchement sales) et l'économie de mémoire qui me semble être substantielle en utilisant des pointeurs.
Par extension, on peut également se demander si en cas de clone de mon objet de type A, la copie de l'attribut doit être prise en charge explicitement où si la duplication est récursive (d'une autre côté, pourquoi cela serait-il le cas vu que le seul attribut est un pointeur?).
En d'autres termes, j'ai du mal à trouver une règle générale qui me permettrait de dire si le code est propre ou non.
Merci de m'en dire plus, bon week end
Partager