답변이 만족스럽지 않아서 2 센트를 더하겠습니다.
다음과 같은 경우를 분석해 봅시다.
잘못된 사용법
int& getInt()
{
int x = 4;
return x;
}
이것은 분명히 오류입니다
int& x = getInt(); // will refer to garbage
정적 변수와 함께 사용
int& getInt()
{
static int x = 4;
return x;
}
정적 변수는 프로그램 수명 기간 동안 존재하기 때문에 이것이 맞습니다.
int& x = getInt(); // valid reference, x = 4
싱글 톤 패턴을 구현할 때도 매우 일반적입니다.
Class Singleton
{
public:
static Singleton& instance()
{
static Singleton instance;
return instance;
};
void printHello()
{
printf("Hello");
};
}
용법:
Singleton& my_sing = Singleton::instance(); // Valid Singleton instance
my_sing.printHello(); // "Hello"
연산자
표준 라이브러리 컨테이너는 참조를 반환하는 연산자의 사용에 크게 의존합니다 (예 :
T & operator*();
다음에서 사용될 수 있습니다
std::vector<int> x = {1, 2, 3}; // create vector with 3 elements
std::vector<int>::iterator iter = x.begin(); // iterator points to first element (1)
*iter = 2; // modify first element, x = {2, 2, 3} now
내부 데이터에 빠르게 액세스
내부 데이터에 빠르게 액세스하기 위해 &를 사용하는 경우가 있습니다
Class Container
{
private:
std::vector<int> m_data;
public:
std::vector<int>& data()
{
return m_data;
}
}
사용법 :
Container cont;
cont.data().push_back(1); // appends element to std::vector<int>
cont.data()[0] // 1
그러나 이것은 다음과 같은 함정으로 이어질 수 있습니다.
Container* cont = new Container;
std::vector<int>& cont_data = cont->data();
cont_data.push_back(1);
delete cont; // This is bad, because we still have a dangling reference to its internal data!
cont_data[0]; // dangling reference!