115 votes

Raison de passer un pointeur par référence en C++ ?

Dans quelles circonstances souhaitez-vous utiliser un code de cette nature dans c++ ?

void foo(type *&in) {...}

void fii() {
  type *choochoo;
  ...
  foo(choochoo);
}

173voto

David Z. Points 2793

Vous voudriez passer un pointeur par référence si vous avez besoin de modifier le pointeur plutôt que l'objet vers lequel le pointeur pointe.

Ceci est similaire à la raison pour laquelle les pointeurs doubles sont utilisés ; l'utilisation d'une référence à un pointeur est légèrement plus sûre que l'utilisation de pointeurs.

70voto

FredOverflow Points 88201

50% des programmeurs C++ aiment mettre leurs pointeurs à NULL après une suppression :

template<typename T>    
void moronic_delete(T*& p)
{
    delete p;
    p = nullptr;
}

Sans la référence, vous ne changeriez qu'une copie locale du pointeur, sans affecter l'appelant.

10voto

mathematician1975 Points 13448

J'ai dû utiliser un code comme celui-ci pour fournir des fonctions pour attribuer de la mémoire à un pointeur passé et retourner sa taille parce que mon entreprise « s'oppose » à moi en utilisant le STL

 int iSizeOfArray(int* &piArray) {
    piArray = new int[iNumberOfElements];
    ...
    return iNumberOfElements;
 }

Ce n'est pas joli, mais le pointeur doit être passé par référence (ou utiliser un double pointeur). Si ce n'est pas le cas, la mémoire est attribuée à une copie locale du pointeur si elle est passée par valeur, ce qui entraîne une fuite de mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X