C++에서이 포인터는 실제로 현재 오브젝트를 가리키는 숨겨진 인수로 메소드에 전달되지만 'this'포인터는 스택, 힙, 데이터의 메모리에 저장됩니다. ?'this'포인터가 할당 된 메모리
답변
이 표준은 지정하지 않습니다 당신은 그것이 하나 개의 변수와 다른 아무것도의 보유 볼 수 있습니다.
해당 함수를 호출 할 때 멤버 함수로 전달되면 일부 컴파일러는이를 레지스터로 전달하고 다른 멤버는 스택으로 전달합니다. 또한 컴파일러 옵션에 따라 달라질 수 있습니다.당신이 확신 할 수있는 유일한 일에 대해
는this
기본 유형의
를 rvalue 때문이다, 그래서 당신은 자신의 주소를 취할 수 없습니다.
항상 그런 것은 아닙니다.
사전 표준 C++에서 this
으로 지정할 수 있습니다. 생성자의 실패를 나타 내기 위해. 이것은 예외가 도입되기 전이었습니다. 건설 실패를 나타내는 현대의 표준 방법은 예외를 던져 버리는 것입니다. 이는 질서 정연한 정리 (악명 높은 MFC 배치 new
버그와 같이 사용자 코드에 의해 훼손되지 않는 경우)를 보장합니다.
C++에서 this
은 "단순히"현재 개체에 대한 포인터입니다. 그것은 당신이 개체 - 특정 데이터에 액세스 할 수 있습니다.
:
this->temperature = 40.0f;
이 객체가 작용되고 무엇 이건 온도를 설정은 (temperature
가정하면 모든 객체들이 공유하는 정적 클래스 수준 아니다 클래스의).
this
포인터 자체는 (동적 메모리 측면에서) 할당 할 필요가 없으며, 모든 것이 커버 아래에서 어떻게 처리되는지에 달려 있습니다. 표준에서 실제로 요구하지 않는 것입니다. 행동에 대한 것보다).
수는 일 수 있습니다. 스택에서, 특정 메모리 위치, 레지스터 등에 등이 있습니다. 당신이 염려해야만하는 것은 기본적으로 객체에 접근하는 방법을 사용하는 동작입니다.
무엇이 this
은을 가리키며 개체 자체이며 동적 할당 또는 스택에 보통 new
으로 할당됩니다.
이 포인터는 클래스 함수 스택 (또는 때때로 레지스터)에 할당됩니다.
그러나 실제로 질문하는 것은 아닙니다.
사실 그것은 묻고있는 질문과 정확히 일치하는 것처럼 보입니다. 나는 대답이 너무 상상을 초월한 것 같지 않다. –
이 포인터는 개체 자체에 있습니다. 일종의입니다. 이것은 객체의 메모리 위치입니다.
개체가 스택에 있으면이 포인터가 스택에 있습니다.
개체가 힙에있는 경우이 포인터는 힙에 있습니다.
결론은 걱정할 필요가 없습니다.
* [업데이트] 내 대답을 철회/명확히/정정하겠습니다. 물리적 인 this 포인터는 객체에 없습니다.
나는이 포인터가 컴파일러에 의해 파생되었다고 결론을 내리고 간단히 기호 테이블에 저장된 개체의 주소입니다. 의미 상으로 그것은 객체 내부에 있지만 OP가 요구했던 것이 아닙니다.
다음은 스택에있는 3 개의 변수의 메모리 레이아웃입니다. 가운데 하나가 대상입니다. this
포인터가 저장되는 위치
- 1. 같은 할당 된 메모리
- 2. 찾기 할당 된 메모리
- 3. 실행시 할당 된 메모리
- 4. 메모리 맵을 사용하여 할당 된 메모리 전달
- 5. 중첩 된 구조체 할당 메모리
- 6. Windows에서 할당 된 메모리 내용
- 7. 공백으로 할당 된 메모리 활동
- 8. 동적으로 할당 된 메모리 삭제
- 9. 중첩 된 구조 할당 메모리
- 10. 할당 된 메모리 블록 찾기
- 11. 메모리 할당
- 12. 메모리 할당
- 13. 메모리 할당
- 14. 메모리 할당
- 15. 메모리 할당
- 16. 메모리 할당
- 17. 할당 메모리
- 18. 메모리 할당
- 19. 할당 메모리
- 20. 메모리 할당
- 21. 메모리 할당
- 22. 메모리 누출의 C/메모리 할당 ++
- 23. 메모리 할당과 동적 메모리 할당
- 24. 메모리 할당 가능 메모리 누수
- 25. 메모리 할당 및 해제 메모리
- 26. 메모리 할당 조회
- 27. 메모리 누수가 발생했지만 할당 된 메모리가 할당 해제되었습니다.
- 28. 할당 연산자에 의해 할당 된 메모리 해제 C++
- 29. 컴파일 된 실행 가능 메모리 할당 수정
- 30. 미리 할당 된 메모리 버퍼가있는 XGetImage
메소드가 호출 될 때 코드가 'this'가 어딘지를 어떻게 알 수 있다고 가정하면 ... 여러 요인에 따라 달라 지겠지만, 분명히 추측하거나 어셈블리 컴파일러를 볼 수 있습니다. 아이디어를 얻기 위해 생성됩니다. – asveikau
나는 'this'가 실제로 포인터가 아니며 그 표현이 사실이라고 읽는다. – nilesh
정확한 복제본 [여기서 'this'포인터는 컴퓨터 메모리에 저장되어 있습니까?] (http://stackoverflow.com/questions/16585562/where-is-the-this-pointer-stored-in-computer-memory) –