C std::string クラスからの継承を避ける理由
Effective C では、 std::string からの継承を避けるための推奨事項これは、仮想デストラクターが欠如していることと、ポリモーフィックな目的であっても基本クラスとして不適切であることに基づいています。クラスが基本クラスとして認定されるための特定の要件と、std::string からの派生の結果を理解すると、この立場がさらに明確になります。
基本クラスの継承の資格
C の継承性は、ポリモーフィックな動作の必要性と密接に結びついています。パブリック継承は、クラスがポインターまたは参照を通じてアクセスされ、動的バインディングを可能にする場合にのみ使用する必要があります。それ以外の場合は、コードを再利用するための自由な関数または合成が推奨されるメカニズムです。
基本クラスとしての std::string
std::string の場合、仮想デストラクターが存在しないと、ポリモーフィックな動作を効果的にサポートできなくなります。さらに、その内部設計は基本クラスとして使用することを目的としていません。
std::string からの派生に関する問題
std::string からの派生では潜在的な問題が発生します。 C のスライス動作によるものです。たとえば、関数が std::string パラメーターを予期している場合、派生オブジェクトを渡すと、派生クラスの追加メンバーが除外された切り詰められたコピーが作成されます。これにより、不一致や未定義の動作が発生する可能性があります。
非ポリモーフィックな基本クラスの使用を防止する
クライアントが純粋に再利用性を目的として基本クラスを使用することを防止します。多態性基本クラスでは、次の手法を使用できます。採用:
以上がC std::string クラスからの継承を避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。