std::string が gcc に実装されている方法を調べていたときに、sizeof(std::string) がポインターのサイズ (x32 ビルドでは 4 バイト、x64 では 8 バイト) と正確に等しいことに気付きました。文字列は文字列バッファーへのポインターとその長さを最低限保持する必要があるため、GCC の std::string オブジェクトは実際には、このデータを保持する内部構造へのポインターであると思いました。
結果として、新しい文字列が作成されると、1 つの動的メモリ割り当てが発生する必要があります (文字列が空の場合でも)。
これは、パフォーマンスのオーバーヘッドに加えて、メモリのオーバーヘッドも引き起こします (これは、非常に小さなメモリのチャンクを割り当てている場合に発生します)。
だから私はそのようなデザインの欠点しか見ません。私は何が欠けていますか?そもそもそのような実装の利点と理由は何ですか?