[c++] 포인터 비교 카테고리
C++에서 포인터 비교는 프로그래머가 자주 실수하는 부분 중 하나입니다. 이 글에서는 포인터의 비교할 때 주의해야 할 점과 자주 하는 실수에 대해 살펴보겠습니다.
포인터 비교의 함정
C++에서 포인터 비교는 메모리 주소의 비교를 의미합니다. 예를 들어, 다음과 같이 두 개의 포인터가 서로 같은 객체를 가리키고 있는지를 확인하는 것이 포인터의 비교입니다.
int* ptr1 = new int(5);
int* ptr2 = ptr1;
if (ptr1 == ptr2) {
// ptr1과 ptr2가 같은 객체를 가리키고 있음
}
주의할 점
그러나, 포인터 비교 시에는 두 가지 주의해야 할 점이 있습니다.
동적 할당된 메모리
포인터가 가리키는 메모리가 동적으로 할당되었을 경우, 메모리 주소가 같더라도 동일한 객체를 가리키는지를 확인해야 합니다. 예를 들어, 다음과 같이 두 개의 포인터가 같은 메모리를 가리키지만, 서로 다른 객체를 가리키고 있는 경우가 있을 수 있습니다.
int* ptr3 = new int(10);
int* ptr4 = new int(10);
if (ptr3 == ptr4) {
// 두 포인터가 같은 메모리를 가리키고 있다고 잘못된 결과가 나옴
}
배열의 첫 번째 요소와의 비교
포인터가 배열을 가리킬 경우, 배열의 첫 번째 요소와의 비교는 의도와 다르게 결과가 나올 수 있습니다. 반드시 주의해서 처리해야 합니다.
결론
포인터 비교는 메모리 주소의 비교로 이루어지기 때문에 주의해서 사용해야 합니다. 동적 할당된 메모리와 배열의 포인터를 다룰 때 특히 주의가 필요합니다.
이러한 함정을 피하려면 C++에서는 스마트 포인터를 사용하는 것이 좋은 방법일 수 있습니다.
포인터 비교에 대한 자세한 내용은 다음 레퍼런스를 참고하시기 바랍니다.
- https://www.learncpp.com/cpp-tutorial/6-8-pointers-and-arrays/
- https://en.cppreference.com/w/cpp/language/operator_comparison