[C++] this 포인터

SuLee·2022년 1월 20일
0

C++

목록 보기
8/8

📌 1. this 포인터의 개념

this 포인터는 객체 자신을 가리키는 포인터이다. 때문에 this 키워드는 클래스 멤버 함수 내에서만 사용이 가능하다. 또한 static 멤버 함수 내에서는 사용이 불가능하다. static 멤버 함수는 객체 생성 전에도 존재하기 때문에 this 포인터가 가리키는 객체가 없을 수 있기 때문이다.

class Test {
private:
    int mNum;
public:
    Test() : mNum(0) {}
    Test(int num) : mNum(num) {}
    void SetNum(int num) { mNum = num; }
    ~Test() {}
    
    Test& ReturnSelf() { return *this; }
    // *this - 주소값이 아닌 객체 자신을 반환
    // 임시 객체를 생성하지 않기 위해 레퍼런스로 반환
};

int main() {
    Test t;
    t.SetNum(1);
}

만약 멤버 변수와 멤버 함수의 매개 변수의 이름이 동일할 때, this를 명시해야 된다.

void SetNum(int mNum) { this->mNum = mNum; }
// this->mNum : 멤버 변수, mNum : 매개 변수

📌 2. this 포인터의 컴파일 과정

t.SetNum(1);

멤버 함수 SetNum은 인자가 1개지만 컴파일될 때 아래처럼 변환되어 매개 변수가 추가된다.

t.SetNum(&t, 1)

매개 변수가 추가되어 멤버 함수인 SetNum도 컴파일 시 아래처럼 변환된다.

void SetNum(Test* const this, int num)

이처럼 this 포인터는 멤버 함수를 호출한 객체 자신의 주소를 가리키게 되고, 컴파일 시 멤버 함수 안의 멤버 변수 앞에 this->가 붙는다.

0개의 댓글