web-dev-qa-db-ja.com

std :: stringはGCC4.x / C ++ 11で参照カウントされますか?

std::stringまたは-std=c++0xでgcc4を使用する場合、-std=c++11は参照カウントされますか?

35
Drew Dormann

libstdc ++ドキュメント を見てください(詳細についてはリンクを参照してください):

文字列は次のようになります。

                       [_Rep]
                       _M_length
[basic_string<char>]   _M_capacity
_M_dataplus            _M_refcount
_M_p ----------------> unnamed array of char_type

したがって、はい、参照カウントされます。また、議論から ここ

はい、std :: stringはある時点で非参照カウントになりますが、非参照カウント文字列はC++ 98でも有効であるため、1つのオプションは非参照カウント文字列に切り替えることです。 -std = c ++ 98モードと-std = c ++ 11モードの両方。それが起こると言っているのではありませんが、そうなる可能性があります。

ですから、適合するように変更する計画があるようです(しかし、進捗状況はわかりません)。

Updateemsrがコメントで指摘しているように、現在vstring.hと呼ばれる非参照カウント拡張があり、それが唯一の理由のようです。 std::stringは、ABIとの互換性のために置き換えられていません。 SOそれについての質問 ここ

25
Jesse Good

C++ 11は特定の言語を追加しましたforbiddingstd::string参照カウントから。したがって、そうである場合、GCCのC++ 11標準ライブラリでかなり重大な失敗が発生します。

22
Nicol Bolas

この質問より後の日付の有用な情報を追加します。

std::stringは、このC++ 11要件に対処するために、GCC 5のリリースで参照カウントされなくなります。

から https://gcc.gnu.org/gcc-5/changes.html

Std :: stringの新しい実装は、コピーオンライト参照カウントの代わりに小さい文字列の最適化を使用して、デフォルトで有効になっています。

13
Drew Dormann