2017-11-29 2 views
33

C++ 표준은 소멸자가 final으로 선언되도록 허용합니까? 이처럼 :소멸자가 최종 결정을 내릴 수 있습니까?

이 허용되는 경우
class FurtherDerived: public Derived {// allowed? 
} 

, 컴파일러가 경고를 발행 할 가능성이 높습니다 :

class Derived: public Base 
{ 
     ... 
     virtual ~Derived() final; 
} 

그리고 경우, 즉 파생 클래스의 선언을 방지 않습니다

? 소멸자가 final이라는 클래스가 클래스가 기본 클래스로 사용되지 않는다는 것을 나타 내기위한 실행 가능한 관용구로 선언되고 있습니까?

(만 파생 클래스, no point in doing this in a ultimate base class 있습니다.)

+3

클래스가 기본 클래스로 사용되지 않는다는 것을 나타내는 관용구는 해당 클래스를 final로 만드는 것입니다. – juanchopanza

+7

클래스가 상속 된 클래스로 적합하지 않다는 것을 나타내려는 경우 전체 클래스를 'final'로 표시 할 수 있습니다. 'class 데비드 final : public Base' –

답변

55

는 C++ 소멸자는 final로 선언 할 수 있습니까?

예.

그렇다면

, 즉 파생 클래스의 선언을 방지 않습니다

예, 파생 클래스 (명시 적 또는 암시 적으로 컴파일러에 의해 중) 소멸자를 선언해야하기 때문에, 그리고 그 소멸자는 final이라고 선언 된 함수를 오버라이드 할 것이며 이것은 부적절하다. 일부 클래스 B의 가상 함수 fVIRT 지정자final와 함수 D​::​f 우선 B​::​f 프로그램 B로부터 유도 된 클래스 D에 표시되어 있으면

:

규칙은 [class.virtual]/4이고 부적절하다.

그것은 파생 된 자체이며, 사용하지 않아도됩니다.

소멸자가 클래스가 기본 클래스로 사용되지 않는 것을 나타 내기위한 최종 가능한 관용구로 선언되고 있습니까?

효과적이지만 클래스 final을 표시해야합니다. 그것은 아주 명백합니다.

+12

"...하지만 그냥 final 클래스를 표시해야합니다. 그리고 [둘 다하는 것은 중복 될 것입니다] (https://stackoverflow.com/questions/43704769/is-the-final-function-specifier-redundant-when-using-the-final-class-specifier). – Raedwald

관련 문제