#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이고 블록을 벗어나는 즉시 사라지기 때문에 가비지 값은 그대로 버려집니다.