Bonjour, je suis en train de me poser des questions sur les références en C++, en particulier les retours de références.
J'ai une classe Base qui est assez lourde, dans cette classe j'ai une fonction du style:
Cette fonction créer une nouvelle Base et la retourne par référence, en fait j'ai plusieurs questions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Base & Base::extraireDebut(const int & nb) const { Base* base = new Base(); ... ... return *base; }
1. Est-ce que l'objet alloué dynamiquement sera détruit à la fin de cette fonction par exemple ?
2. Etant donné que la fonction extraireDebut() retourne un objet assez lourd je voudrait à tout pris éviter une recopie, selon vous le retour d'une référence est une bonne solution ou vaut-il mieux utiliser un pointeur (ce qui me dérange un peu car je souhaiterai que la personne qui utilise mon code n'ait pas à faire de delete) ? Ou peut-être existe t'il d'autres solutions ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Base base; void f(int n) { Base base2 = base.extraireDebut(n); } // ici base2 est désallouée ou non ?
3. Dernière question, j'utilise assez fréquemment les références comme paramètres des fonctions, à mon avis un peu trop souvent d'ailleurs, dans quels cas utiliser des références comme paramètre de fonctions ? Aussi, j'ai lu que les passage/retour par copie était parfois optimisés par les compilos et qu'il n'y avait en fait pas toujours de copie, avez vous plus d'infos à ce sujet ?
Merci.
Bouba
Partager