2016-10-05 3 views
-4

왜 기본 생성자 만 vptr (가상 테이블 포인터) 및 vtable (가상 테이블) 만 만들 수 있습니까? 매개 변수 생성자가 할 수없는 이유C++에서 vptr 및 vtable 개념

+1

* "왜 기본 생성자 만 vptr (가상 테이블 포인터) 및 vtable (가상 테이블)을 만들 수 있습니까?"* 어디에서 아이디어를 얻었습니까? 그건 말이 안되요. –

+0

생성자는 가상의 anythings을 만들지 않습니다. 어떤 타입에서 가상 함수를 가지는 것은 타입을 다형 적으로 만든다. 그러나 이것은 컴파일 타임이며 생성자와는 아무런 관련이 없다. – xaxxon

답변

5

먼저 vtable 및 vptrs는 C++ 언어 표준에 의해 지정되지 않습니다.

구현 세부 사항입니다. 비록 현존하는 모든 C++ 구현이이 기술을 사용하여 가상 함수 디스패치를 ​​구현한다는 것을 알고 있습니다.

이러한 구현에서는 가상 멤버 함수가있는 클래스의 모든 생성자가 필연적으로 해당 개체의 vptr을 설정합니다. 그것 없이는 작동하지 않을 것입니다. 그래서 & hellip;

왜 매개 변수 생성자하지 수

중 & hellip에; 단순히 잘못된 가정 일뿐입니다.

+3

또한 * no * 생성자가 vtable을 만듭니다. –

0

구현시 vtables ("Cheers and hth - Alf"에서 언급 한 것처럼 일반적인 구현 선택)를 사용한다고 가정하면 vtable 및 생성자 생성/생성은 별개의 작업입니다.

그러나 주어진 (비 추상적 인) 클래스의 모든 인스턴스는 일단 완전히 구성된 경우 동일한 vtable 집합 (여러 개의 상속 클래스가 둘 이상의 vtable을 가질 수 있음)을 갖습니다. 객체 생성 방법에 따라 다른 vtable이 없을 것입니다 (예 : 생성자에 전달되는 매개 변수, 생성자가 호출되는 등).