• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

차이점을 잘 모르겠습니다.

24.04.07 17:50 작성 조회수 65

0

주신 프로그램 중 constructSelect.cpp 에서 디폴트 생성자를 지우면 에러가 발생하는데 virtualFunction 에서는 디폴트 생성자가 없어도 동작합니다.

  1. constructSelect.cpp 에서 선언 방식이 아닌 new 연산자를 사용해서 해봐도 에러가 발생하고

  2. 객체 내에 멤버메서드가 없어서 그런가 해서 멤버를 만들어도 에러가 발생합니다

  3. VirtualFunction 내의 소멸자의 virtual 을 제거해도 이건 잘 작동합니다.

눈으로 봐서는 도저히 차이점을 모르겠습니다.

답변 1

답변을 작성해보세요.

0

  1. 디폴트 생성자가 사용되는 선언이나 동적 생성 코드가 존재한다면 디폴트 생성자 삭제 시 오류가 발생합니다. 그런데 생성자를 아예 하나도 정의하지 않는다면 컴파일러가 디폴트 생성자를 넣어주기 때문에 디폴트 생성 오류는 발생하지 않습니다.

  2. 생성은 클래스 멤버와 무관합니다.

  3. 소멸자 가상화는 적절한 ADT 적용 시 추상 형식으로 파생 클래스 인스턴스 삭제 시 적절한 소멸자가 호출될 수 있도록 하기 위한 것으로 문법과는 상관이 없습니다.

    생성자에 대한 문법을 다시 살펴보는 것이 좋겠습니다. 참고하시기 바랍니다. 😄