Declaro una variable string s;
Cadena de C++ utiliza el búfer máximo asignado?
y do s = "abc";
ahora tiene un buffer de 3 caracteres.
Después
s = "abcd"
que tiene un buffer de 4 caracteres.
Ahora, después de la tercera declaración
s = "ab"
pregunta es va a mantener el buffer de 4 caracteres o va a reasignar un buffer de 2 carácter?
Si va a asignar memoria intermedia de 2 caracteres, hay alguna forma de que pueda mantener el búfer máximo asignado.
¿Mantiene el búfer de tamaño máximo asignado?
s = "ab"
s="abc"
s="a"
s="abcd"
s="b"
Ahora se debe mantener un buffer de tamaño 4.
¿Es posible?
Depende de la implementación: g ++ cambiará la capacidad si le asigna una nueva cadena, con una capacidad más pequeña, y VC++ usualmente usará la capacidad más pequeña que pueda de un conjunto fijo de capacidades. (Sospecho que estás pensando en 'std :: vector'; lo que describes es el comportamiento de ni g ++ ni VC++, y no puedo creer que no hayas visto ninguno de esos). –