• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

3분 10초 부근 질문 있습니다.

22.11.02 07:44 작성 조회수 148

0

~Base()가 virtual 이라면은 ~Base() 대신에 오버라이드된 ~Derived()가 실행이 되고 끝이 아니라 왜 ~Base()도 실행이 되나요?

~Derived() override
{
	cout << "~Derived()" << endl;
	delete[] m_array;
	Base::~Base();
}

저는 이렇게 해야될 걸로 예상했는데 소멸자는 예외인가요?

답변 1

답변을 작성해보세요.

3

좋은 질문인데, 이건 C++ 언어가 그렇게 만들어진 것 입니다. C++ 를 설계할 때 이렇게 작동하도록 정해놓은 것이지요. 그렇다면 왜 이렇게 설계했는지가 궁금하실텐데 지금 적어놓으신 코드 처럼 부모의 소멸자를 매번 적어주는 것은 번거롭다고 판단하셨을 겁니다.

여기도 참고하세요.

https://stackoverflow.com/questions/677620/do-i-need-to-explicitly-call-the-base-virtual-destructor