참조 형식 멤버 초기화

#include <iostream>
using namespace std;

class CRefTest
{
public:
	CRefTest(int & rParam) : m_nData(rParam) {};
	int GetData(void) { return m_nData; }

private:
	int& m_nData;
};
int main()
{
	int a = 10;
	CRefTest t(a);

	cout << t.GetData() << endl;

	a = 20;
	cout << t.GetData() << endl;
	

	return 0;
}

여기서 CRefTest(int & rParam) {m_nData = rParam};

참조 타입에 따라 선언과 정의가 이루어져야 하기 때문입니다.

즉, int a = 10; 주요 기능에서.

CRefTest t(a)를 바꿔 말하면

참조 m_nData는 rParam을 가리키고 참조 rParam은 a를 가리킵니다. m_nData(rParam(a))


1. 더 알게 된 점

CRefTest(int &Param) { m_nData = rParam};

도달하지 않음 m_nData = rParam이 단순 할당으로 블록에 정의되지 않았기 때문입니다.


2. 더 배운 것

CRefTest(int rParam) : m_nData(rParam){}; , 오류가 나타나지 않지만

처음에는 정상적인 값을 얻었지만 두 번째에는 쓰레기 값을 얻었습니다.

이유: 생성자 함수인 CRefTest 함수에서 int rParam은 10의 a 값을 얻고 m_nData는 10의 rParam 값을 가져오는데 처음에는 정상적으로 값이 출력되나 다음에는 a=20; rParam은 참조 유형이므로 중요하지 않습니다. rParam의 값은 10이고 블록을 벗어나는 즉시 사라지기 때문에 가비지 값은 그대로 버려집니다.