なぜ std::string からの派生を控えるべきなのか
Scott Meyers は、著書『Effective C』の中で、std からの派生を避けるようアドバイスしています。 :string クラス。これは主に仮想デストラクターが欠如しているためです。ただし、これがそのような継承を回避する唯一の理由ではありません。
継承の基準の定義
適切な基本クラスとして機能するには、クラスは次のことを行う必要があります。
基本クラスとしての std::string
std::string は、次の理由によりこれらの基準を満たしていません:
さらに、継承が再利用性のみを目的とするシナリオでも、C にはクライアントが作成することを防ぐメカニズムがありません。基本クラス ポインターを使用した派生クラスのオブジェクト。これは、そのような使用を制限する意図された目的に違反する可能性があります。
継承違反の結果
これらのガイドラインを無視すると、次のようなコードが生成される可能性があります。
結論としては、 C での継承はポリモーフィックな状況のために予約されるべきであり、std::string は設計上の制約とスライスの問題のため、基本クラスとして使用されるべきではありません。非メンバー関数や合成などの代替メソッドを採用することで、慣用的な C の実践が促進され、コードの明確さと信頼性が確保されます。
以上がC で std::string を決して継承してはいけないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。