ホームページ > バックエンド開発 > C++ > C STL コンテナから継承する必要がありますか?

C STL コンテナから継承する必要がありますか?

Barbara Streisand
リリース: 2024-12-01 11:58:11
オリジナル
933 人が閲覧しました

Should You Inherit from C   STL Containers?

C STL コンテナからの派生の潜在的な落とし穴

C 標準ライブラリ (STL) コンテナからの派生の実践は、議論が行われており、その使用に反対する人もいます。関数のオーバーロードや特殊化の有効化などの利点があると認識されていますが、このアプローチには潜在的なリスクがあります。

STL コンテナーに仮想デストラクターが存在しないことは、重大な危険をもたらします。仮想デストラクターのない STL コンテナからクラスを派生する場合、派生クラスは多態性の動作を適切に処理できない可能性があります。これにより、特に派生クラスのオブジェクトがコンテナに格納され、基底クラス ポインターを通じてアクセスされる場合、予期しない結果が生じる可能性があります。

説明のために、次のシナリオを考えてみましょう。

この例ではの場合、kill_it 関数には派生クラス Charges に関する知識がありません。その結果、基本クラス std::vector の非仮想デストラクターが呼び出され、Charges 型のオブジェクトを破棄するときに未定義の動作が発生する可能性があります。 Rates で見られるように、Charges が型エイリアスまたは typedef として実装されている場合、この動作は発生しません。

STL コンテナからの派生に関するもう 1 つの潜在的な問題は、Microsoft のベクター クラスの実装から発生します。この実装では、vector<> を使用して、vector クラス自体が継承を通じて実装されます。 _Vector_Val<> から公的に派生しました。これにより、派生クラスを使用する場合、さらに複雑さと潜在的な危険が加わります。

特定のシナリオでは継承を使用することに利点があるかもしれませんが、多くの場合、その利点には複雑さの増加と潜在的なリスクが伴います。基本クラスではなくコンテナをメンバー変数として使用する構成は、一般に、明確性と派生に関連する潜在的な問題を回避するために推奨されます。

以上がC STL コンテナから継承する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート