할당이 성공한 경우뿐 아니라 예외, 조기 반환, 배열 해제, 포인터 정리까지 함께 봐야 합니다.
초기 포인터가 쓰레기 주소를 들고 있지 않게 합니다.
new/delete, new[]/delete[]가 일치하는지 확인합니다.
중간에 return이나 예외가 나도 해제 경로가 남아 있는지 봅니다.
댕글링 포인터를 빨리 드러내도록 남은 포인터를 비웁니다.
같은 블록을 두 곳에서 해제하려는 구조를 피합니다.
가능하면 컨테이너나 스마트 포인터가 수명을 관리하게 합니다.
저수준 API, 레거시 코드, 특수한 성능 제약처럼 책임을 명확히 문서화할 수 있어야 합니다.
std::vector, std::unique_ptr, std::string이 안전한 기본 선택입니다.