En effet lorsque tu fais appel à ta fonction
void CReadFile::removeComment(std::string l)
Ton objet string est recopié, la modification à l'intérieur de ta fonction se font sur cette copie, et à la sortie de ta fonction tu l'objet initial n'est pas modifié
Deux solutions :
- Le passage de paramétre par référence
void CReadFile::removeComment(std::string& l)
Tu récupère l'adresse de ton objet original. Inconvénient lorsque tu lit l'appel de la fonction on ne remarque pas que l'objet peut etre modifié. A savoir j'utilise tout le temps le passage par référence pour des appels qui ne modifie pas mes objets, mais préfixé le parametre par const.
void CReadFile::NeModifiePasLeParam(const std::string& l)
L'avantage tu passe seulement l'adresse de ton object, ce qui évite la recopie de l'objet.
- Le passage de paramétre par pointeur (conseillé par B. Stroustrup)
void CReadFile::removeComment(std::string* pl)
Tu récupère l'adresse de ton objet original. Avantage lorsque tu lit l'appel tu passe ta chaine par référence:
std::string l; removeComment(&l);
Inconvénient il faut tester le paramètre pour tester la validité du pointeur.
1 2 3 4 5
| void CReadFile::removeComment(std::string* pl)
{
if ( pl == NULL ) throw BadParameter();
...
} |
Le C/C++ demande une grande maitrise des pointeurs, ne tienquiete pas c'est loin d'être facile mais il faut vraiment en bouffé pour comprendre toutes les subtilités.
Partager