this
특정 객체의 수명 동안 포인터 값 이 일정하게 유지됩니까? 나는 그것이 변하는 경우를 상상할 수 없지만 내가 빠진 것이 있는지 모르겠습니다.
std::move
변경 this
합니다. 공식적으로 우리는 그것들이 두 가지 다른 대상이라고 말하지만, 비공식적으로 그것들은 "동일한"것으로 생각할 수 있는데,주의를 기울이지 않으면 혼란을 일으킬 수 있습니다.
this
특정 객체의 수명 동안 포인터 값 이 일정하게 유지됩니까? 나는 그것이 변하는 경우를 상상할 수 없지만 내가 빠진 것이 있는지 모르겠습니다.
std::move
변경 this
합니다. 공식적으로 우리는 그것들이 두 가지 다른 대상이라고 말하지만, 비공식적으로 그것들은 "동일한"것으로 생각할 수 있는데,주의를 기울이지 않으면 혼란을 일으킬 수 있습니다.
답변:
this
특정 객체의 수명 동안 포인터 값 이 일정하게 유지됩니까?
예 .
사용자 Aconcagua 가 말했듯이 : this
포인터 의 값은 항상 1 에서 함수가 호출 된 객체의 주소 값입니다 . 따라서 질문은 다음과 같습니다.
수명이 지남에 따라 객체의 메모리 주소를 변경할 수 있습니까?
lifetime
2의 정의에 따르면 불가능합니다 . 오브젝트의 수명은 스토리지 확보 시점 또는 이후에 시작하여 해제되기 전에 종료됩니다.
비 정적 (
[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
힙의 움직임에 관계없이 매번 동일한 값을 제공하기 위해 "있는 그대로"동작해야한다는 의미 입니까?
객체에는 저장 영역이 있습니다. this
거기에 포인트.
물체는 구성 기간 (
[class.cdtor]
), 수명 전체 및 파괴 기간 ( ) 에서 보관 영역을 차지합니다[class.cdtor]
.
의 값 this
이 프로그램은 이제까지 그것을 읽는 경우 읽기 값의 이후 일부 비트를 수집하거나 경우 쓰레기로 불가능한 경우 읽기 값의 일부 비트 프로그램의 외부 탈출 이후 보장은 일정해야합니다. 다른 모든 경우에 슈뢰딩거의 고양이처럼 행동합니다. 즉, 동시에 일정하고 가변적입니다.
this
this
포인터 의 값은 항상 함수가 호출 된 객체의 주소 값입니다. 따라서 질문은 '객체가 수명 시간 동안 메모리 주소를 변경할 수 있습니까?'와 같습니다.