C STL コンテナからの継承のリスク
提起される疑問は、標準 C コンテナからの継承に関連する実際のリスクがあるかどうかです。著者は、typedef std::vector
使用例
次のコード スニペットを考えてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
著者は、不運なユーザーが恣意的に ??? でエラーを引き起こす可能性があると示唆しています。このセクションは、Charges (派生クラス) では問題を引き起こしますが、Rates (typedef) では問題を引き起こしません。
Virtual Destructors
ここでの重要な問題は、その標準です。 C コンテナには仮想デストラクターがありません。したがって、それらを多態的に処理することはできません。あなたとあなたのコードのすべてのユーザーがこの原則に従うのであれば、標準コンテナから継承することは本質的に間違っているわけではありません。ただし、作者は明確にするために合成を推奨しています。
継承よりも合成
コンテナから継承する代わりに、合成を使用する方がクリーンで安全です。これには、コンテナのインスタンスをメンバー変数として含む新しいクラスの作成が含まれます。これにより、クラスの機能をより柔軟に制御できるようになります。
この使用例では、たとえば、std::vector
以上がC STL コンテナからの継承は危険ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。