std::string
またはで gcc 4 を使用する場合、参照カウントは行われます-std=c++0x
か-std=c++11
?
3 に答える
私が見つけた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。
C++11 では、参照カウントを禁止する特定の言語が追加されました。 std::string
もしそうなら、それは GCC の C++11 標準ライブラリのかなり重大な失敗です。
この質問に日付を記入するいくつかの有用な情報を追加します。
std::string
この C++11 要件に対処するために、GCC 5 のリリースでは参照カウントが行われなくなります。
https://gcc.gnu.org/gcc-5/changes.htmlから
std::string の新しい実装がデフォルトで有効になり、コピーオンライト参照カウントの代わりに小さな文字列の最適化が使用されます。