C++標準では、デストラクタをfinal
として宣言できますか?このような:
class Derived: public Base
{
...
virtual ~Derived() final;
}
もしそうなら、それは派生クラスの宣言を防ぎます:
class FurtherDerived: public Derived {// allowed?
}
isが許可されている場合、コンパイラは警告を発行する可能性がありますか?デストラクターをfinal
として宣言することは、クラスが基本クラスとして使用されることを意図していないことを示すための実行可能なイディオムですか?
( 究極の基本クラスでこれを行う意味はありません 、派生クラスのみです。)
C++デストラクタを
final
として宣言できますか?
はい。
もしそうなら、それは派生クラスの宣言を防ぎます:
はい、派生クラスはデストラクタを宣言する必要があるため(明示的にまたはコンパイラによって暗黙的に)、デストラクタはfinal
と宣言された関数をオーバーライドします。これは不正な形式です。
ルールは [class.virtual]/4 :
クラスBの仮想関数
f
がvirt-specifierfinal
およびクラスDでマークされている場合Bから導出された関数D::f
オーバーライドB::f
、プログラムの形式が正しくありません。
派生物自体が不正な形式であるため、使用する必要はありません。
デストラクタをfinalとして宣言することは、クラスが基本クラスとして使用されることを意図していないことを示すための実行可能なイディオムですか?
事実上、クラスfinal
をマークするだけです。かなり明確です。