Retour par référence d'attribut de classe
Bonjour à tous,
Je m'interroge sur la façon de faire des getter sur des membres de classe.
En imaginant la classe suivante :
Code:
1 2 3 4 5 6 7 8 9
| class MaClasse
{
public:
MonObjet GetObjet();
MonObjet& GetObjet2();
private:
MonObjet mObjet;
} |
Mon background de dev java me fait plutôt pencher vers un retour par référence sur un Getter.
Cependant j'ai l'impression qu'en C++ c'est une mauvaise idée car si je fait :
Code:
1 2 3
| MonObjet& resultat = o.GetObjet2();
//Ici destruction de MaClasse pour X raisons
resultat.methode(); // Crash ? |
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 ?
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 :
Code:
1 2 3 4
| void Classe::SetObjet(MonObjet obj)
{
mObjet = obj;
} |
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 ?
Merci :)