<aside> 💡 목차


</aside>

객체가 생성될때, 시작주소를 담는 상수포인터가 생성된다.

C++의 this pointer는 클래스 멤버 함수의 숨겨진 매개변수입니다. 

this pointer는 함수가 호출될 때 자동으로 전달되는 포인터로, 

함수가 호출된 객체의 주소를 가리킵니다.

객체가 생성될 때 객체의 시작주소를 가지는 상수 포인터가 자동으로 생성되며, 

이를 통해서 자기 자신의 멤버 변수 및 함수에 접근이 가능합니다

Untitled

Untitled

클래스를 기반으로 만들어진 객체들이 가진 값들은 메모리에 저장될거아냐?

객체가 생성될떄, 디폴트로 만들어지는 상수값이 있음.

상황을 생각해보자!

fr1이라는 친구가 print함수를 호출했을떄,

print()라는 클래스끼리 공유된 함수에 접속하게될때,

함수내부에서 fr1.분모 fr1.분자 이렇게 따로따로접근은 가능한데,

fr1 자체의 값에는 어떻게 접속할거야?

fr1메모리 시작값(주소값)을 상수로 저장하는데, 이걸 this pointer라고 부른다.
객체 스스로의 주소값이 저장되다보니, 

*this.<함수> 

이런식으로 자기가 가지고있는 함수를 실행시킬 수 있다.

다음같이 표현할 수 있습니다!

fr1.store() == *this.store()
*this.value == this-> value

→ this pointer 왜씀?

C++ 정책에서 그 이유를 찾을 수 있음


"C++는 각 멤버 함수의 복사본을 하나만 유지하며, 데이터 멤버는 모든 인스턴스에 대해 메모리를 할당받습니다. 이런 종류의 다양한 데이터 인스턴스는 this pinter 를 사용하여 유지됩니다.”

C++은

멤카피를 하나씩 가지고있고

데이터들은 각 인스턴스마다 각각 가지고있음

각 인스턴스들은 자신의 시작값을 가지고있음

그래서 그 시작값에대한 시작주소값을 가지고있다
즉, 각 객체들은 생성될때, 전혀 다른 데이터 공간에 해당 객체들의 속성값들이 생긴다고했지?

그렇기 때문에 각 객체간 구분이 가능했던거고!

객체들의 위치가 전부 다르기 때문에, 객체들의 위치를 찾기 위해서라도 

this pointer 가 필요하다

→ this pointer 예시 코드

class Person {
    private:
        int age;
    public:
        Person(int age) //생성자 함수
				{
            this->age = age;
        }

        **void printAge() 
				{
            cout << "age = " << this->age << endl;
        } //함수를 실행하면, 호출자의 주소에 접근하여 개체의 데이터를 출력해줌**
};
Person p(10); //p라는 Person객체를 생성.
p.printAge(); //p의 나이가 출력됨