35

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

4

3 に答える 3

25

私が見つけた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 モードの両方。それが起こるとは言いませんが、そうなる可能性があります。

ということで、適合するように変更する予定があるようです(進捗状況はわかりませんが)。

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

于 2012-09-20T20:43:50.593 に答える
23

C++11 では、参照カウントを禁止する特定の言語が追加されました。 std::stringもしそうなら、それは GCC の C++11 標準ライブラリのかなり重大な失敗です。

于 2012-09-20T20:20:22.853 に答える
13

この質問に日付を記入するいくつかの有用な情報を追加します。

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

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

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

于 2015-03-05T06:09:38.773 に答える