Encore une question sur les références
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:
Code:
1 2 3 4 5 6 7 8 9
|
Base & Base::extraireDebut(const int & nb) const {
Base* base = new Base();
...
...
return *base;
} |
Cette fonction créer une nouvelle Base et la retourne par référence, en fait j'ai plusieurs questions:
1. Est-ce que l'objet alloué dynamiquement sera détruit à la fin de cette fonction par exemple ?
Code:
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 ? |
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 ?
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