ホームページ > バックエンド開発 > C++ > `std::string` からの継承を避けるべき理由は何ですか?

`std::string` からの継承を避けるべき理由は何ですか?

Susan Sarandon
リリース: 2024-12-10 19:09:14
オリジナル
883 人が閲覧しました

Why Should You Avoid Inheriting from `std::string`?

std::string から継承することが推奨されない理由

Effective C では、仮想デストラクターは、クラスが多態性の動作を示す能力にとって非常に重要です。したがって、std::string に仮想デストラクターが存在しないと、仮想デストラクターからの派生が事実上禁止されます。これにより、次のような疑問が生じます: 適切な基本クラスとして資格を得るには、クラスが満たさなければならない追加の基準は何ですか?

基本クラス ステータスの資格

暗黙の仮定に反して質問では、クラスは基本クラスとして機能するためにポリモーフィズムをサポートする必要はありません。 C の継承は、次の 2 つの主な目的を果たします。

  1. プライベート継承: この手法は、ミックスインやテンプレートベースのアスペクト指向プログラミングなどの革新的な実践に活用されます。
  2. パブリック継承: この形式の継承は、多態性を確立するために厳密に予約されています。 scenario.

基本クラスとしての std::string

その理由は、仮想デストラクターがないことだけではありません。 std::string は、ポリモーフィックであろうとなかろうと、基本クラスとして機能することを意図したものではありません。これは、C のクラスのプロパティに起因すると考えられます。

クラスが参照型である他のオブジェクト指向言語とは異なり、C はクラスを値型として扱います。その結果、基本クラス オブジェクトがコピーされると、そのメンバーのみがコピーされ、派生クラスのメンバーはコピーされません。スライシング問題として知られるこの現象は、不整合や誤った動作を引き起こす可能性があります。

したがって、メソッド拡張の継承を実装するのではなく、非フレンド、非メンバー関数を利用することが C のベスト プラクティスと考えられています。または構成。継承は、テンプレートのメタプログラミングまたはポリモーフィック動作の確立のために予約する必要があります。

非ポリモーフィック継承の防止

基本クラスがコードの再利用のみを目的としている場合には、次のようなものがあります。派生クラスへのポインターの作成を防ぐ効果的な方法はありません。ただし、プライベート継承を使用したり、派生クラス メソッドのアクセスを制限したり、パブリック基本クラス メソッドを回避したりすると、その使用が妨げられる可能性があります。

以上が`std::string` からの継承を避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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