2014-10-15 2 views
2

필자가 아는 한, 가상 함수가 있지만 비상 가상 소멸자가있는 클래스를 정의하는 것은 항상 실수 (또는 최소한 문제를 요구한다)이다.다형성 클래스의 암시 적 소멸자를 가상으로 만들 수 있습니까?

이와 같이 (새로 작성한 "제로 규칙"에 대해 생각하면) 내게 암시 적으로 생성 된 소멸자는 적어도 하나의 다른 가상 함수가있는 클래스의 경우 가상으로 있어야합니다.

향후 버전의 C++ 표준에서이를 위임 할 수 있습니까? 또는 다른 방법으로 말하면, 다형성 클래스에서 기본 소멸자를 가상이 아닌 것으로 유지하는 좋은 이유가 있습니까?

편집 : 그냥 난 단지 당신이 소멸자를 작성하지 할 경우에 일어날 일에 제안하고있어, 그것을 명확하게하기 - 당신이 직접 작성 할 경우 가상의 여부를 선택할 수 물론, 당신을 또는 아닙니다. 나는 단지 일반적인 경우 (더 많은 고급 사용법을 막지 않고)에 일치하는 기본값을보고 싶다.

+2

기본 클래스에 대한 포인터에서 개체를 항상 삭제하지는 않습니다. 실제로 다형 적으로 사용하더라도 항상 동적으로 할당하지는 않습니다. – juanchopanza

+0

가상 함수가있는 클래스에 대해 암시 적으로 생성 된 소멸자가 없습니다. – ThomasMcLeod

+0

@ juanchopanza 물론 아닙니다. 그러나 만약 당신이 하나의 가상 함수를 가지고 있다면 어쨌든 vtable에 돈을 내고있는 것입니다 : 가상 소멸자에 대한 추가 비용은 얼마입니까? 가상 함수 오버 헤드는'delete'의 비용 옆에 무시할 수 있습니다. 나는 생각했을 것입니다. –

답변

1

이러한 객체를 다형 적으로 삭제하고 싶지 않거나 필요가 없으면 소멸자가 가상 ​​일 필요는 없습니다. 대신 기본 클래스에서 가상이 아닌 protected이 될 수 있으므로 비 다형 적으로 만 삭제할 수 있습니다. 자동으로 가상화되도록 요구하면 다형성 파기가 필요하지 않은 응용 프로그램에 과도한 비용이 부과됩니다.

+0

소멸자가 항상 가상 일 필요가 있다고 제안하는 것이 아니라, 제공하지 않으면 어떻게 될지에 대해서만 제안했습니다. 자신 만의 글을 쓰는 경우 ('보호'해야 할 것처럼), 가상 적이거나 아닌지를 선택할 수 있습니다. 나는 단지 일반적인 경우 (더 많은 고급 사용법을 막지 않고)에 일치하는 기본값을보고 싶다. –

관련 문제