Zmienne członkowskie odniesienia jako członkowie klasy

W moim miejscu pracy widzę ten styl szeroko stosowany: -

#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;
}

Czy istnieje nazwa opisująca ten idiom? Zakładam, że ma to na celu zapobieganie możliwemu dużemu nakładowi na kopiowanie dużego złożonego obiektu?

Czy to ogólnie dobra praktyka? Czy są jakieś pułapki w tym podejściu?

questionAnswers(5)

yourAnswerToTheQuestion