Variáveis ​​de membro de referência como membros da classe

No meu local de trabalho, vejo esse estilo ser usado extensivamente:

#include <iostream>

using namespace std;

class A
{
public:
   A(int& thing) : m_thing(thing) {}
   void printit() { cout << m_thing << endl; }

protected:
   const int& m_thing; //usually would be more complex object
};


int main(int argc, char* argv[])
{
   int myint = 5;
   A myA(myint);
   myA.printit();
   return 0;
}

Existe um nome para descrever este idioma? Eu estou supondo que é para evitar a sobrecarga possivelmente grande de copiar um objeto grande e complexo?

Esta é geralmente uma boa prática? Há alguma armadilha para essa abordagem?

questionAnswers(5)

yourAnswerToTheQuestion