是在GCC 4.x / C ++ 11中的std :: string refcounted?

当使用gcc 4与-std=c++0x-std=c++11时, std::string引用被计数吗?

看看libstdc ++文档,我发现(请参阅链接了解更多信息):

一个string看起来像这样:

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

所以,是的,这是裁判计数。 另外,从这里的讨论:

是的,std :: string在某些时候会被做非引用计数,但是作为一个非引用计数的string在C ++ 98中也是有效的,一个选项就是切换到一个没有引用计数的string对于-std = c ++ 98和-std = c ++ 11模式。 我不是说这会发生,但可能是。

所以,似乎有计划把它变成符合(我不知道进展如何)。

更新正如emsr在注释中指出的那样,目前有一个名为vstring.h的非引用计数扩展,它似乎是它没有replacestd::string的唯一原因是ABI的兼容性。 这里有一个关于它的问题 。

C ++ 11添加了特定语言禁止引用计数的std::string 。 所以如果是这样的话,那么这在GCC的C ++ 11标准库中是一个非常重要的失败。

添加一些有用的信息后date这个问题。

为了解决这个C ++ 11的要求, std::string不再引用GCC 5的版本。

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

std :: string的新实现默认是启用的,使用小string优化而不是写时复制引用计数。