Bonjour à tous,
Je m'interroge sur la façon de faire des getter sur des membres de classe.
En imaginant la classe suivante :
Mon background de dev java me fait plutôt pencher vers un retour par référence sur un Getter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class MaClasse { public: MonObjet GetObjet(); MonObjet& GetObjet2(); private: MonObjet mObjet; }
Cependant j'ai l'impression qu'en C++ c'est une mauvaise idée car si je fait :
A aucun moment une référence sur un objet va m’empêcher de détruire l'objet initial et par conséquent me mettre quelque peu dans la mouise me trompe je ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MonObjet& resultat = o.GetObjet2(); //Ici destruction de MaClasse pour X raisons resultat.methode(); // Crash ?
Du coup un retour par copie me semble plus sur , mais cela veux également dire que si l'objet retourné fait 10M en ram , je vais bouffer 10M pour potentiellement pas grand chose le temps que le scope de la copie se termine, non ?
Bref je suis un peu perdu sur la solution à adopter.
Toujours en se basant sur l'exemple de classe précédent si je fait un setter de ce type :
Que devient la mémoire précédement allouée par mObjet ? Est ce qu'elle sera libérée une fois la classe complète détruite ou simplement lors de la nouvelle copie ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void Classe::SetObjet(MonObjet obj) { mObjet = obj; }
Merci![]()
Partager