가상 생성자는 어떤 때 쓰는건가요?

조회수 2497회

C++에 가상 생성자는 어떤 때 쓰는건가요?

가상 생성자는 진짜 쓸모없는 기능인것 같은데 어떤 떄 쓰는 건지 모르겠습니다. 보통 상속받으면 superclass 생성자는 자동으로 호출되는거 아닌가요? 왜 굳이 virtual을 써서 번거롭게 만들죠

  • 가상 소멸자 또한 알아보심 좋아요 ㅎㅎ 이것도 아래 답변이랑 비슷하지만요. ㅋ 알 수 없는 사용자 2016.3.21 15:27

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    Bjarne Stroustrup's C++ Style and Technique FAQ 에 Why don't we have virtual constructors?를 간략히 요약하면

    virtual 생성자는 이 클래스가 객체를 생성할 용도가 아닌, 인터페이스로 쓰기 위해 만든 클래스라는 것을 드러내기 위해 쓰입니다.

    A virtual call is a mechanism to get work done given partial information. In particular, "virtual" allows us to call a function knowing only any interfaces and not the exact type of the object. To create an object you need complete information. In particular, you need to know the exact type of what you want to create. Consequently, a "call to a constructor" cannot be virtual.

    • 가상 호출이라는 것은 모름지기 부분적으로 아는 녀석을 호출하기 위해서 쓰이는 것입니다. 특히, 'virtual'은 우리가 호출하려는 객체의 정확한 타입은 모르는데 호출하는 방법 (인터페이스) 정도는 아는 함수를 호출할 수 있도록 해주는 녀석이지요. 그런데 당신이 어떤 객체를 만든다라고 하면 그 녀석을 만드는데 필요한 모든 정보를 가지고 있어야 하겠지요. 콕 찍어서 말하자면, 만들려는 녀석의 타입을 알아야 하는 겁니다. 결과적으로 이미 다 알고 있는 녀석을 부르는 동작이 'virtual' 호출이 (되어서도 안되고)될 수는 없겠지요. 한마디로 줄이자면, '생성자라는 것은 객체를 생성하기 위해서 부르는 것인데, 알지도 못하는 녀석을 생성할 수는 없는것 아니겠느냐? 그러니까 virtual로 생성자를 부른다라는 것은 말도 안된다.' 라는 뜻입니다. 알 수 없는 사용자 2016.3.23 08:58

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)