티스토리 뷰

728x90
반응형

 

2편: SAFE_DELETE / SAFE_DELETE_ARR – 안전한 포인터 메모리 해제

✅ 문제 상황

C++에서는 new로 생성한 메모리를 반드시 delete로 해제해야 합니다. 하지만 실수로 중복 delete를 하거나 delete 후 포인터를 그대로 두면, 이중 해제 (double free)뎅글링 포인터 (dangling pointer) 문제가 생깁니다.

🧯 해결 방법: SAFE_DELETE 매크로

#ifndef SAFE_DELETE
#define SAFE_DELETE(var) { if ( (var) != nullptr ) delete (var); (var) = nullptr; }
#endif

#ifndef SAFE_DELETE_ARR
#define SAFE_DELETE_ARR(var) { if ( (var) != nullptr ) delete[] (var); (var) = nullptr; }
#endif

이 매크로는 포인터가 nullptr이 아닌 경우만 delete를 수행한 후, 반드시 nullptr로 초기화해줍니다.

🧠 사용 예시

int* pInt = new int(10);
SAFE_DELETE(pInt);

char* pStr = new char[100];
SAFE_DELETE_ARR(pStr);

⚠️ 주의할 점

  • deletenullptr에 대해 호출해도 무방하나, 명시적으로 체크하면 가독성 향상
  • delete[]는 반드시 배열에 사용

🧰 inline 함수 대안

template<typename T>
inline void SafeDelete(T*& ptr) {
    if (ptr != nullptr) {
        delete ptr;
        ptr = nullptr;
    }
}

✅ 요약

매크로 설명
SAFE_DELETE 포인터 해제 후 nullptr 설정
SAFE_DELETE_ARR 배열 해제 후 nullptr 설정
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형