[c++] `this` 포인터의 값이 객체의 수명 동안 일정합니까?

this특정 객체의 수명 동안 포인터 값 이 일정하게 유지됩니까? 나는 그것이 변하는 경우를 상상할 수 없지만 내가 빠진 것이 있는지 모르겠습니다.



답변

this특정 객체의 수명 동안 포인터 값 이 일정하게 유지됩니까?

.

사용자 Aconcagua 가 말했듯이 : this포인터 의 값은 항상 1 에서 함수가 호출 된 객체의 주소 값입니다 . 따라서 질문은 다음과 같습니다.

수명이 지남에 따라 객체의 메모리 주소를 변경할 수 있습니까?

lifetime2의 정의에 따르면 불가능합니다 . 오브젝트의 수명은 스토리지 확보 시점 또는 이후에 시작하여 해제되기 전에 종료됩니다.


1) [class.this]/1

비 정적 ( [class.mfct]) 멤버 함수 의 본문 에서 키워드 this는 값이 함수 인 함수에 대한 포인터 인 prvalue 입니다.

2) [basic.life]/1 (강조 광산)

객체 또는 참조의 수명은 객체 또는 참조의 런타임 속성입니다. 변수가 기본값으로 초기화되고 변수가 클래스 유형이거나 (다차원) 배열 인 경우 해당 클래스 유형에는 간단한 기본 생성자가 있습니다.
다음과 같은 T경우 유형의 객체 수명이 시작됩니다 .

  • 저장 적절한 정렬 및 크기와 유형을 T수득 하고,
  • 초기화 (있는 경우) ((진공의 초기화 포함) 완료 [dcl.init])를 제외한 그 목적은 조합원 또는 하위 객체 그 경우, 그 조합의 구성원이 조합의 초기화 부재의 경우 수명은 시작 ( [dcl.init.aggr], [class.base.init]), 또는 에 설명되어 [class.union]있습니다.

o유형 객체 의 수명은 다음과 같은 T경우에 종료됩니다 .

  • 만약 T 비 클래스 타입, 객체 파괴, 또는
  • 만약 T 클래스 유형이다 소멸자 호출이 시작, 또는
  • 객체가 차지하는 스토리지가 해제 되거나 o( [intro.object]) 안에 중첩되지 않은 객체가 재사용합니다 .

답변

객체에는 저장 영역이 있습니다. this거기에 포인트.

[intro.object]/1

물체는 구성 기간 ( [class.cdtor]), 수명 전체 및 파괴 기간 ( ) 에서 보관 영역을 차지합니다 [class.cdtor].


답변

의 값 this이 프로그램은 이제까지 그것을 읽는 경우 읽기 값의 이후 일부 비트를 수집하거나 경우 쓰레기로 불가능한 경우 읽기 값의 일부 비트 프로그램의 외부 탈출 이후 보장은 일정해야합니다. 다른 모든 경우에 슈뢰딩거의 고양이처럼 행동합니다. 즉, 동시에 일정하고 가변적입니다.


답변