Bonjour à tous,

Je m'interroge sur la façon de faire des getter sur des membres de classe.
En imaginant la classe suivante :

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;
}
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 : 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 ?
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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