c++

C++ 동적 할당

isaacagent 2024. 1. 17. 02:28
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