Je suis entrain de coder un programme +/- gros et je me pose cette question.
Mieux vaut-il passer un pointeur sur un "objet" dans une fonction (1) ou
passer l'objet directement dans la fonction (2).
Quelles méthode sera la plus rapide ?
Déjà, est ce que c'est possible de faire ce que j'ai dit, parce que j'ai essayé, mais le compilateur râle .
En somme, petit exemple (1)
Temperature temp(3,2);//création d'un objet Temperature
Light myLight(2,temp);// utilise l'objet temp
Ce code compile.
Temperature temp(3,2);//création d'un objet Temperature
int *pointeur = &temp;// Ne compile pas, mais c'est l'idée.
Light myLight(2,pointeur);// utilise l'objet temp
Ce code ne compile pas.
Voilà, j'espère m'avoir fait comprendre
Merci à tous !
renaudyes:
Je suis entrain de coder un programme +/- gros et je me pose cette question.
Mieux vaut-il passer un pointeur sur un "objet" dans une fonction (1) ou
passer l'objet directement dans la fonction (2).
Quelles méthode sera la plus rapide ?
Si tu passes un objet en argument - sans pointeur, il y a copie de l'objet avant appel de la fonction.
Tu t'en doute, copie de mémoire = utilisation de temps et de ressources.
Si tu passes un objet en argument - par pointeur, il n'y a pas de copie, tu utilises directement l'objet d'origine.
Ça veux aussi dire que si tu touches à l'objet pointé. Il sera donc modifié en dehors de la fonction courante si tu fait des modification sur celui-ci dans ta fonction.
En C++ on n'utilise pas de pointeur dans ce genre de situation (c'est old-school 8)).
Si tu veux un code rapide mais qui marche "comme par copie" il convient d'utiliser une référence constante.
Exemple rapide :
void toto(String machaine) {
// version pas rapide si tu ne fait pas de modification sur machaine.
}
void toto2(const String& machaine) {
// L'objet d'origine est utilisé sans copie mais reste en lecture seule grâce au const.
}
Un peu de doc technique pour mieux comprendre :
NB : ça reste des micro-optimisations. Regarde d'abord l'architecture de ton programme et les goulots d'étranglement possibles dans le code.
Si tu gagnes 1µs par appel de fonction mais que tu perds derrière 10ms à faire une boucle foireuse ou un calcul en flottant, avec une String ou autre ça ne sert plus à rien