나는이 같은 매우 간단한 클래스 작성하는 경우 :가상 메소드가있는 경우 vtable이 생성됩니까?
class A
{
public :
virtual void foo()
{
}
};
(NO 가상 소멸자) 컴파일러의 vtable을 만들 것입니다을? 아니면 현대적인 컴파일러가이 케이스 (잘못된 복사 및 붙여 넣기 일 수 있음)를 인식하고 그러한 클래스에 대한 가상 테이블을 추가하지 않을만큼 똑똑합니까?
일반적인 기술은 첫 번째 가상 비선형 구성원으로 vtable을 방출하는 것입니다. 가상 인라인이 아닌 멤버가있는 곳에서는 대체 기능이 무엇인지 모르겠지만 인라인 함수 나 템플릿 인스턴스화에서 정적 인 것보다 해결하기가 더 어려운 문제는 아닙니다. – AProgrammer
가상 소멸자는 다른 가상 함수가없는 경우 클래스가 다형성이되도록하는 한 가지 방법 일뿐입니다. (A에 대한 포인터를 통해 파생 클래스를 삭제하려는 경우에도 필요합니다. –
@AProgrammer - 컴파일러는 vtable의 복사본을 많이 생성하고 링커에서 정렬해야 할 것입니다. –