Rendre un code plus rapide si c'est possible

Bonjour à tous :),

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 :grin:.

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 :stuck_out_tongue:
Merci à tous !

Bonjour,

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 :wink: