Is std::string ref-counted in GCC 4.x / C++11?
c++, c++11, gcc, stdstring
Solution
Looking at libstdc++ documentation I find (see the link for more info):
A string looks like this:
[_Rep]
_M_length
[basic_string<char>] _M_capacity
_M_dataplus _M_refcount
_M_p ----------------> unnamed array of char_type
So, yes it is ref counted. Also, from the discussion here:
Yes, std::string will be made non-reference counting at some point, but as a non-reference-counted string is valid in C++98 as well, one option would be to switch to a non-ref-counted string for both -std=c++98 and -std=c++11 modes. I'm not saying that's what will happen, but it could be.
So, it seems there are plans to change it to be conforming (I don't know how the progress is going though).
Update As emsr points out in the comments, there is currently a non-reference counted extension called `vstring.h`, and it seems the only reason it hasn't replaced `std::string` is because of ABI compatibility. There is an SO question about it here.
Problem
Is `std::string` reference-counted when using gcc 4 with `-std=c++0x` or `-std=c++11`?