대충 책에서는 소멸자가 동작하는 순서가 파생클래스 소멸자가 먼저 호출되는 것으로 시작으로 기본 클래스 쪽으로 거쳐 올라가면서 각 기본 클래스의 소멸자가 하나씩 호출됩니다. 컴파일러는 ~awov의 호출 코드를 만들기 위해 파생 클래스의 소멸자를 사용한다 라면서 안하면 링크에러 난다는데
지금 이해가 안가는게 결국 가상 소멸자 만들면 결국 파생 클래스부터 소멸자 일어나면서 계속 파고들면서 기본 클래스 소멸자까지 호출되서 사라지는 구조아님?
결국 파고들면 기본 클래스 까지 가는데 미리 정의해둘이유가 있음? 링크에러가 날이유를 하나도 모르겠는데 왜 그런거냐?
검색해봐도 걍 이렇게 해야된다는 얘기만 있고 왜그런지는 설명을 안해놨네
빡대가리라 이해를 못하겠다 설명좀 해줄사람 읎냐?
이건 추상클래스로 만들고싶은데 딱히 virtual줄만한게 없으면 그냥 깔끔하게 소멸자에 virtual을 붙이라는 말임. 어짜피 순수가상함수가 있는 클래스는 인스턴스를 만들수없고 해제할게 없으니 소멸자가 할 역할이 없음. 그래서 소멸자를 순수가상함수로만드는건데 문제는 질문글처럼 파생클래스부터 따라올라가면서 호출을 함 . 가상테이블 보면서 함수찾아가는데 몸통(구현)이없으면 이부분이 없을거고 그래서 링킹에러가난다는 뜻임
아 추상 클래스라 구현이 안되서 따로 밖에서 구현한다는 의미임?
아니 그냥 몸통 빈 중괄호넣어주면됨
사실 virtual도 자식형 포인터로 자식형 동적할당하면 virtual 안달아도 지워짐. 부모형 포인터로 자식형 동적할당하면 안지워지고.