2010-10-22 4 views
0

Possible en double:
What is the proper way to return an object from a C++ function ?Différence entre "MyClass & func1 (void)" et "MyClass * func2 (void)"

Salut,

je voudrais savoir quelle est la différence entre les deux fonctions suivantes en ce qui concerne les types de retour?

  1. MyClass & func1 (void)
  2. MyClass * func2 (void)

J'ai toujours pensé que ce serait la même chose?

Heinrich

+4

un rendement de référence, pointeur celui-ci, http://www.parashift.com/c++-faq-lite/references.html – Anycorn

+0

@sbi cette question semble différent de ça. Celui-ci ressemble à "Quelle est la différence entre montrer du doigt un gâteau et le manger? Je pensais que c'était la même chose!" et l'autre semble "Que dois-je faire quand je veux un morceau de gâteau de mon ami? Demandez-le ou mangez-le juste?". Rien dans la question pointée (sans jeu de mots) répond à cette question. J'ai plutôt déprécié celui-ci, parce que c'est "Pas une vraie question". Quelle différence? Le lexical? "L'un utilise et l'autre utilise *". Le syntaxe? "L'un utilise une référence, l'autre utilise un pointeur". L'utilisation des deux? –

+0

Merci pour votre réponse. donc si je crée un std :: map cela va insérer des références aux objets, pas des pointeurs, ni copier les objets lui-même, non? – Erik

Répondre

4

Le premier est seulement capable de retourner une référence à un objet unique et ne peut pas être nulle. Ou plutôt, cela ne devrait pas être nul.

La seconde peut renvoyer le pointeur vers un objet unique ou un tableau d'objets.

Dans les cas où vous souhaitez renvoyer un seul objet qui ne peut pas être nul, # 1 a tendance à être la forme préférée. Dans les cas où un null peut être retourné # 2 doit être utilisé. Certaines API ne renvoient pas de références du tout (comme QT).

Ceci est strictement une différence syntaxique. Ces deux types sont traités exactement de la même manière dans le code compilé: un pointeur vers l'objet (ou le tableau) sera utilisé. Autrement dit, la notation de référence & n'apporte aucune nouvelle fonctionnalité sémantique sur un pointeur normal.

(Ce peut-être juste ce que résume les autres personnes ont écrit)

+0

Bon résumé, merci! – Erik

1

le premier renvoie référence à un objet (ou son adresse). L'autre pointeur renvoie, non référence

différence majeure: le second peut revenir NULL

+0

Un autre majeur, le second peut renvoyer un pointeur dans un tableau entier d'objets. – UncleBens

+0

Vous pouvez également renvoyer une référence null, mais c'est plutôt moche. –

+0

Il n'y a pas une telle chose .. référence NULL .. vous pourriez retourner 0x00, qui est l'adresse zéro, mais ce n'est pas NULL ref. –

Questions connexes