08.27 - TIL

김혁·2025년 8월 27일

TIL

목록 보기
5/84

오늘의 코드카타

부대복귀

  • 출발점과 도착점을 반대로 생각한 후에 BFS
    -> 문제 풀이

오늘의 공부

학습한 강의

  • Chapter 5 : 네트워크 관련된 액터의 다양한 속성들
    • NetLoadOnClient
    • NetUpdateFrequency
    • Relevancy
    • NetPriority
    • NetDormancy

정리 노트

오늘의 CS

가상 함수 vs 순수 가상 함수

  • 가상 함수
    • 부모 클래스에서 virtual 키워드를 붙여 선언한 함수
    • 자식 클래스에서 재정의를 통해 객체의 실제 타입에 따라 호출되는 함수가 결정됨
    • 반드시 구현이 되어 있어야 함
    • 자식 클래스에서 재정의하지 않아도 그대로 사용 가능
  • 순수 가상 함수
    • 부모 클래스에서 = 0으로 선언하는 가상 함수
    • 함수의 인터페이스만 정의하고 구현은 하지 않는 함수
    • 반드시 자식 클래스에서 구현해야 사용 가능
    • 순수 가상 함수가 하나라도 있으면, 그 클래스는 추상 클래스(객체 생성 불가)가 됨
  • 순수 가상 함수를 구현하지 않았을 때 발생하는 에러
    • MSVC -> 컴파일 에러 - 순수 가상 함수를 그대로 상속받아서 추상 클래스를 인스턴스화한다고 에러가 발생함
    • gcc -> 런타임 에러 - pure virtual function call
  • virtual 키워드 내부 동작 과정
    • 클래스에 virtual 함수가 있으면 컴파일러는 클래스마다 vtable을 만듬
    • 객체가 생성될 때, 각 객체 내부에는 vptr이 생기고 자기 클래스의 vtable을 가리키게 됨
    • 가상 함수 호출 시 vptr을 통해 vtable에서 해당 함수를 찾아서 호출
  • 소멸자에 virtual를 붙이지 않는 경우
    • 컴파일러는 정적 타입 기준으로 소멸자를 호출하기 때문에, 만약에 상속을 받아서 사용할 경우에 자식 클래스의 소멸자가 호출되지 않음
    • 따라서 자식 클래스가 동적 할당한 리소스 해제가 누락 -> 메모리 누수 발생

캐스팅 과정

  • RTTI가 동작하는 방식
    • virtual 키워드가 붙은 클래스는 컴파일러가 vtable(가상 함수 테이블)을 만듬
    • RTTI를 활성화하면, vtable 앞쪽 메모리에 타입 정보 객체(type_info)를 넣음
    • type_info에는 클래스 이름, 상속 관계 정보 등이 들어있음
    • 런타임에 vtable을 따라가서 type_info를 참조해서 객체의 실제 타입을 판별함
  • dynamic_cast 동작 과정
    • dynamic_cast는 vtable에서 type_info를 확인함
    • 실제 객체의 타입이 자식 클래스인지 비교
      • 맞으면 변환 성공 -> 유효한 포인터 반환
      • 틀리면 포인터일 때는 nullptr 반환 , 레퍼런스일 때는 bad_cast 예외 발생
profile
게임 개발자를 향해..

0개의 댓글