C ++ 클래스 (또는 상위 클래스 중 하나)에 가상 메서드가 하나 이상 있다는 것은 클래스에 가상 테이블이 있고 모든 인스턴스에 가상 포인터가 있음을 의미합니다.
따라서 메모리 비용은 매우 명확합니다. 가장 중요한 것은 인스턴스의 메모리 비용입니다 (특히 인스턴스가 작은 경우, 예를 들어 정수를 포함하려는 경우 :이 경우 모든 인스턴스에 가상 포인터가 있으면 인스턴스 크기가 두 배가 될 수 있습니다.). 가상 테이블이 사용하는 메모리 공간은 실제 메소드 코드가 사용하는 공간에 비해 일반적으로 무시할 수 있다고 생각합니다.
이것은 저에게 질문을 던집니다. 방법을 가상으로 만드는 데 측정 가능한 성능 비용 (즉, 속도 영향)이 있습니까? 런타임시 모든 메서드 호출시 가상 테이블에서 조회가 발생하므로이 메서드에 대한 호출이 매우 자주 발생하고이 메서드가 매우 짧으면 측정 가능한 성능 저하가있을 수 있습니까? 플랫폼에 따라 다르지만 벤치 마크를 실행하는 사람이 있습니까?
내가 묻는 이유는 프로그래머가 가상 메소드를 정의하는 것을 잊었 기 때문에 발생한 버그를 발견했기 때문입니다. 이런 종류의 실수를 본 것은 이번이 처음이 아닙니다. 그리고 저는 생각했습니다. 왜 가상 키워드가 필요 하지 않다고 확신 할 때 가상 키워드 를 제거 하는 대신 필요할 때 가상 키워드를 추가 해야합니까? 성능 비용이 낮 으면 팀에서 다음을 권장합니다. 모든 클래스에서 소멸자를 포함한 모든 메서드를 기본적으로 가상으로 만들고 필요할 때만 제거합니다. 그게 당신에게 미친 것처럼 들립니까?