[Edit] Cross avec GCHmm c'est difficile à mettre le doigt sur la diff, mais pour moi:
void truc(Objet *o) {
// o est une valeur
o = NULL;
}
void truc(Objet &o) {
// o est une référence
}
Puisque dans le premier cas je peux jouer et modifier 'o' sans affecter le programme d'où 'o' vient. Alors que dans l'autre cas je touche direct au 'o' de l'appelant, même sans le vouloir (d'où l'intérêt d'avoir dans ce cas les mots clé in et out, ce que le C++ propose à moitié avec le const).
Mais bon ce n'est pas très intéressant de pinailler pour ça et j'imagine qu'il doit déjà y avoir des millions de trolls sur le net qui en ont débattu, je pensais juste que ça méritait la précision

aze (./248) :
chacun peut affecter l'état d'un objet si tu codes réellement en POO ? mais non au contraire, irait à l'encontre des principes d'encapsulation si tout le monde est autorisé à modifier un objet privé détenu par un autre objet. Et de la même manière, pourquoi un objet encapsulé dans un autre devrait l'être par référence et pas par valeur ?
Houlà non c'est pas ce que j'ai voulu dire. Un objet ne doit pas te mettre à disposition un objet qui lui est privé! C'est pour ça que dans les getters tu fais normalement toujours des .Clone(), ou mieux tu retournes des informations moins spécifiques à l'implémentation interne, et finalement les objets utilisés comme des enregistrements sont immuables.
Sinon un objet encapsulé dans un autre peut l'être par valeur oui (vu que c'est un objet local au sens C++) mais bon ça ne change plus grand chose au final puisque lui seul a la référence, c'est juste plus lent...