C STL コンテナからの派生の潜在的な落とし穴
C 標準ライブラリ (STL) コンテナからの派生の実践は、議論が行われており、その使用に反対する人もいます。関数のオーバーロードや特殊化の有効化などの利点があると認識されていますが、このアプローチには潜在的なリスクがあります。
STL コンテナーに仮想デストラクターが存在しないことは、重大な危険をもたらします。仮想デストラクターのない STL コンテナからクラスを派生する場合、派生クラスは多態性の動作を適切に処理できない可能性があります。これにより、特に派生クラスのオブジェクトがコンテナに格納され、基底クラス ポインターを通じてアクセスされる場合、予期しない結果が生じる可能性があります。
説明のために、次のシナリオを考えてみましょう。
この例ではの場合、kill_it 関数には派生クラス Charges に関する知識がありません。その結果、基本クラス std::vector
STL コンテナからの派生に関するもう 1 つの潜在的な問題は、Microsoft のベクター クラスの実装から発生します。この実装では、vector<> を使用して、vector クラス自体が継承を通じて実装されます。 _Vector_Val<> から公的に派生しました。これにより、派生クラスを使用する場合、さらに複雑さと潜在的な危険が加わります。
特定のシナリオでは継承を使用することに利点があるかもしれませんが、多くの場合、その利点には複雑さの増加と潜在的なリスクが伴います。基本クラスではなくコンテナをメンバー変数として使用する構成は、一般に、明確性と派生に関連する潜在的な問題を回避するために推奨されます。
以上がC STL コンテナから継承する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。