2010-01-19 5 views
1

Je suis tombé sur le code suivant, ok, pas exactement mais proche. Le point d'intérêt est la deuxième ligne du (code fortement abrégé). Pourquoi faut-il initialiser une référence 'someReference'? Autre alors être en mesure d'utiliser. opérateur au lieu de ->? ptrC'est aussi bon, non? (Il est à l'intérieur de la méthode de fil, si cela fait une différence)à l'intérieur du thread C++, initialisation de la référence

// this line, why? 
SomeClass & someReference(*ptrThis); 

unsigned SomeClass::someThread(void *ptr) 
{ 
SomeClass *ptrThis = reinterpret_cast<SomeClass*>(ptr); 
SomeClass & someReference(*ptrThis); 

// some other code 
} 

Répondre

3

Références toujours doivent être initialisés quand ils sont déclarés (à moins qu'ils soient externes). Ils restent liés à un objet durant toute leur vie. Cela garantit qu'une référence, contrairement à un pointeur normal, ne peut (théoriquement) jamais être NULL car elle doit faire référence à quelqu'un. Attribuer à une référence affecte au référencé.

+1

+1 et il empêche également le code d'essayer de libérer la mémoire associée à l'objet. –

2

Oui; ptrThis est aussi bon. Question de style, je suppose. Cela semble un peu redondant compte tenu de ce que vous avez publié, mais je vais donner à l'auteur original le bénéfice du doute que cela avait du sens dans le contexte de l'exemple complet.

0

Il n'a pas à faire quoi que ce soit lié à des fils et à ce titre ne peut pas interpréter beaucoup de ce que l'extrait de code que vous avez donné