[C++] 포인터 사용에 관한 내용

빵욱·2024년 4월 5일

C++을 이번에 사용하게 되면서 포인터 사용 시 잘 몰랐던 부분 정리.

MyClass* pA = new MyClass();
MyClass* pB = pA;  // pB는 pA와 같은 객체를 가리킨다.

위 와 같이 MyClass의 포인터 인스턴스를 2개 생성하고 pB에 pA의 주소를 할당.

delete pA;  // pA가 가리키는 객체를 메모리에서 해제.
pA = nullptr;  

나는 pA 를 메모리 해제하고 nullptr를 넣으면 pB도 null를 가리킬 줄 알았는데 그게 아니었음.
pA가 가리키는 객체는 메모리에서 해제되지만, pB는 여전히 그 메모리 주소를 가리키고 있는 상태로 남아 있게 되는거였음.

이 상태에서 pB를 사용하려고 하면, 이미 해제된 메모리를 참조하는 것이 되어 정의되지 않은 동작이 발생한다고 한다. 이러한 상태를 "dangling pointer"라고 하더라..

그래서

delete pA;  // pA가 가리키는 객체를 메모리에서 해제.
pA = nullptr;  // 

// pB도 nullptr로 설정
pB = nullptr;

이렇게 pB도 nullptr을 할당해줘야 안전하다고 한다.

profile
rove drink eat

0개의 댓글