24.12.24 TIL

2024. 12. 26. 09:56·TIL(Today I Learned)

오늘 학습한 내용

순수 가상 함수

class Test
{
	virtual void YouMustOverrideThis() = 0;
}

위와 같이 가상 함수를 반드시 하위 클래스에서 재정의(Override)하도록 강제한다.

이는

  1. 사용자(프로그래머)에게 이를 상속받는 클래스에서 특정 함수를 재정의 할 것을 알리는 역할,
  2. 인스턴스화가 불가능하다. 대신, 포인터로 하위 클래스를 가리킬 수 있다.
  3. 포인터로 하위 클래스의 인스턴스를 가리켜, 다형성을 지원하게 된다.
class Foo
{
public:
	virtual void SomeFunction() = 0;
}

class Bar : public Foo
{
public:
	virtual void SomeFunction() override
    {
    	// Any Processing
        OhYeah();
    }
    
    void OhYeah();
}

int main()
{
	Foo* FooPtr = new Bar();
    FooPtr->SomeFunction();		// 가상 함수 테이블을 통해 Bar에 정의된 SomeFunction()을 호출하게 된다.
    
    return 0;
}

순수 가상 소멸자만 존재하는 클래스

그렇다면 순수 가상 소멸자만 존재하는 클래스(생성자는 순수 가상 함수가 될 수 없다)의 경우에 대해서 고려해 보자

class OnlyPureVirtualDestructor
{
public:
	virtual ~OnlyPureVirtualDestructor() = 0;
}

OnlyPureVirtualDestructor::~OnlyPureVirtualDestructor()
{
}

왜 이런 형태의 클래스가 존재해야 할까? 그리고 하위 클래스에서 재정의하는 것인데 왜 또 소멸자를 직접 구현했을까?

 

순수 가상 소멸자 클래스의 필요성

  • 추상 클래스로서의 역할 강조
    • 인스턴스 생성 불가
    • 공통 인터페이스 제공
  • 다형성 지원
    • 동적 바인딩 : 실제 호출되는 소멸자는 파생 클래스의 소멸자. 따라서 다형적인 소멸이 가능하게 한다.
  • 안전한 메모리 관리
    • 파생 클래스에서 할당한 자원들을 안전하게 해제하기 위해 소멸자를 재정의해야 함을 강제. 이로 인해 파생 클래스에서 할당한 자원들을 소멸시키도록 유도한다.
  • 부모 클래스에 다른 함수를 순수 가상 함수를 두고 싶지 않을 때, 정확하게는 부모 클래스에 별도의 다른 역할이 필요 없을 때 사용한다.

순수 가상 소멸자를 구현한 이유

  • 컴파일러는 소멸자가 반드시 구현되어 있을 것이라 가정하고 문법 검사를 수행한다. 따라서 구현하지 않는다면 컴파일 오류가 발생한다.
  • 파생 클래스에서 재정의를 강제하기 위한 것으로 아무 일도 하지 않도록 하기 위해서

 

'TIL(Today I Learned)' 카테고리의 다른 글

24.12.27 TIL  (0) 2024.12.27
24.12.26 TIL  (0) 2024.12.26
24.12.23 TIL  (1) 2024.12.23
24.12.20 TIL  (2) 2024.12.20
24.12.19 TIL  (2) 2024.12.19
'TIL(Today I Learned)' 카테고리의 다른 글
  • 24.12.27 TIL
  • 24.12.26 TIL
  • 24.12.23 TIL
  • 24.12.20 TIL
DevJoo1120
DevJoo1120
  • DevJoo1120
    Jin's Programming
    DevJoo1120
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 포트폴리오 (7)
        • Castlevania: Aria of Sorrow.. (7)
        • [UE5] KILL Everything (0)
      • C++ (0)
      • 라이브러리 (1)
      • 다이렉트X11 (0)
      • Unreal Engine (11)
        • Unreal Document (1)
        • 이것 저것 (8)
        • UI (1)
      • 자료구조 및 알고리즘 (0)
      • 책 정리 (3)
        • 코딩 테스트 합격자 되기 C++ 편 (10)
      • 코딩 테스트 (32)
        • 프로그래머스 (32)
      • 스파르타 코딩 언리얼 1기 (9)
        • 특강 (0)
        • C++와 Unreal Engine으로 3D .. (2)
      • TIL(Today I Learned) (63)
      • 영어 공부 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이중 반복문
    프로그래머스
    코딩테스트
    반복문
    문자열
    WINAPI
    배열
    Study
    Unreal Engine 5
    과제
    코딩 테스트
    map
    스파르타 코딩 클럽
    C++
    책 정리
    코딩 테스트 합격자 되기 c++ 편
    정리
    Til
    정렬
    팀 프로젝트
  • hELLO· Designed By정상우.v4.10.5
DevJoo1120
24.12.24 TIL
상단으로

티스토리툴바