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 : 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;
}
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 : 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 ?
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