[ Effective C++ ] 항목 51 : new 및 delete를 작성할 때 따라야 할 기존의 관례를 잘 알아 두자

Minsu._.Lighting·2023년 12월 16일
0

[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "

[핵심]

" 따르기 힘든 규칙은 없지만 일부는 이해하기에 살짝 까다로운게 있기 때문에 무엇인지에 대해 유념해 둘 필요가 있다! "

  • 관례적으로 operator new 함수는 메모리 할당을 반복해서 시도하는 무한 루프를 가져야 하고, 메모리 할당 요구를 만족시킬 수 없을 때 new 처리자를 호출해야 하며, 0바이트에 대한 대책도 있어야 한다. 클래스 전용 버전은 자신이 할당하기로 예정된 크기보다 더큰(틀린) 메모리 블록에 대한 요구도 처리해야 한다!
  • operator delete 함수는 널 포인터가 들어왔을 때 아무 일도 하지 않아야 한다, 클래스 전용 버전의 경우에는 예정 크기보다 더 큰 블록을 처리해야 한다!

💡 operator new 및 operator delete를 구현할 때

📌 operator new

- 반환 값
- 요청된 메모리를 마련해 줄 수 있으면 그 메모리에 대한 포인터를 반환, 그 반대의 경우는 bad_alloc 타입의 예외를 던지게 하자

- 가용 메모리가 부족할 경우 new 처리자 함수를 호출해야 한다!

- 크기가 없는(0바이트) 메모리 요청에 대한 대비책을 갖춰야 한다!

📢 기본 형태의 new가 가려지지 않도록 한다!

📌 operator delete

- C++ 널 포인터에 대한 delete 적용이 항상 안전하도록 보장한다는 사실만 잊지 않으면 된다!

📢 기본 클래스에서 가상 소멸자를 빼먹으면 operator delete 함수가 똑바로 동작하지 않을 수 있다!
- 가상 소멸자가 없는 기본 클래스로부터 파생된 클래스의 객체를 삭제하려고 할 경우, operator delete로 C++가 넘기는 size_t 값이 엉터리일 수 있다!

profile
오코완~😤😤

0개의 댓글

관련 채용 정보