是在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优化而不是写时复制引用计数。