728x90
int main(){
int* p1{};
int* p2{};
int* p3{};
p1 = new int{};
p2 = p1;
p3 = p1;
*p1 = 100;
printf("%d %d %d \n", *p1, *p2, *p3);
delete p1;
printf("%lld\n", (__int64)p1);
printf("%lld\n", (__int64)p2);
printf("%lld\n", (__int64)p3);
printf("%X\n", (__int64)*p2);
}
포인터 변수 3개를 선언을 한 후
하나의 포인터 변수에만 동적 할당을 해줍니다. 유니폼 초기화를 위해서 {}도 붙여줍니다.
동적 할당은 new로 선언은 진행 해주고, 그 뒤에 자료형을 붙여줍니다.
그 후로 포인터 배열 p2와 p3 에 p1을 대입해 줍니다.
해제 이전까지의 형태는 이런 느낌일 것이다.
delete를 통해서 p1의 동적 할당을 해제를 진행을 한다.
여기서 알아야 할 점은 p1은 동적 할당 해제가 되었지만
그 외 p2, p3 포인터들은 같은 주소를 가리키고 있다는 점이다.
그래서 결과값이 p1은 해제가 된 주소값을 보여주고
p2와 p3는 기존의 주소값을 보여주고 있는 것이다.
그리고 이를 16진수 결과값으로 보면 DDDDDDDD라는 값이 나오는데
이는 동적 할당 해제가 된 결과를 나타낸다.
'c++' 카테고리의 다른 글
c++ 복사 생성자 관련 (0) | 2024.01.15 |
---|---|
Call by value 와 Call by reference (0) | 2024.01.15 |
c++ 생성자(constructor) (1) | 2024.01.10 |