12

重複の可能性:
デリゲートではなく、STL コンテナーから実装を継承しても問題ありませんか?

私の質問は、なぜ STL コンテナーに仮想デストラクタがないのですか? 一部の人々 (前者の質問の著者を含む) は、仮想 dtor がないということは、クラスが継承できないことを意味すると確信しています。私はそのような強力な声明に懐疑的です. また、誰も私の答えに反応しませんでした

したがって、前の質問で行われた仮定に疑問を投げかけ、この重要な問題を明確にすることは良い考えだと思います. STL コンテナーは継承を許可するように設計されていますか? より一般的には、継承には仮想デストラクタが必要ですか?

4

1 に答える 1

18

STL コンテナーは継承を許可するように設計されていますか?

標準ライブラリ コンテナーは継承を許可します。標準ライブラリ コンテナー クラスからの継承を妨げるものは何もありません。これを行うと、コンパイル エラーは発生しません。
しかし、それらが設計されていないのは、基本クラス ポインターを介した派生クラス オブジェクトの破棄を許可することです。そのため、そのようなシナリオ (要するに動的ポリモーフィズム) で継承を使用したい場合、標準ライブラリ コンテナーは明らかにそのために設計されていません。

継承には仮想デストラクタが必要ですか?

delete基本クラスのデストラクタは、派生クラス オブジェクトを指す基本クラス ポインターで呼び出す場合にのみ、仮想である必要があります。基本クラスのデストラクタが仮想でない場合、未定義の動作が発生します。

要約すると、ルールは次のとおりです。

動的ポリモーフィズムのための継承が必要な場合、標準ライブラリのコンテナ クラスはそれ用に設計されていませんが、その必要がない場合は、それらから安全に継承できます。

注:提供した回答リンクの分析は正しいです。おそらく、元の Q が投稿されてから長い間 (数年) 後に回答が投稿されたため、回答が得られませんでした。あなたは今そこに私の+1を持っています.

于 2012-12-30T07:39:13.980 に答える