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


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

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

  • 2016년 02월 25일에 작성됨

  • 가상 소멸자 또한 알아보심 좋아요 ㅎㅎ 이것도 아래 답변이랑 비슷하지만요. ㅋ    박현균   2016.3.21 15:27     
조회수 200


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.

  • 2016년 02월 25일에 작성됨

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

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close