[ Effective C++ ] 항목 7 : 다형성을 가진 기본클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자!

Minsu._.Lighting·2023년 11월 19일
0

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

[핵심]

" 먼저 머리속으로 가상 소멸자를 사용 할 상황인지 정리하자! "

  • 어떤 클래스가 가상 함수를 하나라도 갖고있으면 가상 소멸자를 선언하자!
  • 기본 클래스로 설계되지 않았거나 다형성을 갖도록 설계되지 않은 클래스에는 가상 소멸자를 선언하지 말자!

💡 다형성을 가진 기본 클래스에서 그냥 소멸자를 쓴다면?

  • 기본클래스 부분만 소멸되는 부분소멸이 발생 함
    - 파생클래스를 포인터로 소멸시킬 때 기본클래스 포인터를 통해 삭제가 되는데, 기본클래스의 소멸자가 비가상 소멸자라면 기본클래스가 가진 부분들만 소멸 된다.

📢 STL컨테이너, string 등 가상 소멸자가 없는 클래스 타입은 기본클래스로 삼는 경우는 절대 없어야 함!



💡 그렇다고 모든 클래스를 가상 소멸자로 선언하지 말자!

📌 가상함수가 하나라도 들어있을 경우에만 가상소멸자로 만들자!

📌 객체의 크기가 커진다!

  • 가상 함수 테이블
    - 가상 함수 포인터 배열.

  • 가상 함수 테이블 포인터
    - 가상 함수 테이블을 가리키는 포인터, 가상 함수가 있는 객체에 멤버변수로 추가



💡 어떤 클래스를 추상 클래스로 만들고 싶을 때...

  • 마땅히 넣을 순수 가상 함수가 없다면 소멸자를 순수 가상 함수로 만들자!
profile
오코완~😤😤

0개의 댓글

관련 채용 정보