Re[3]: std::string as std::vector?
От: Demay  
Дата: 29.03.05 05:51
Оценка:
Здравствуйте, Mr. None, Вы писали:

[...]

MN>Кто мешает держать этот кэш внутри себя, обновлять при вызове c_str() и удалять при разрушении... Заметьте, никто не гарантирует даже следующего:

MN>
MN>const char *str = someStlStr.c_str();
MN>SomeFunc(str); // не факт, что здесь была передана верная строка...
MN>

Для подтверждения выше приведенного примера нельзя ли дать ссылку на стандарт ?
А также правильно ли понял фразу: "не факт, что здесь была передана верная строка..."
Из этой фразы я понял, что можной найти такие условия, при которых result будет отличен от нуля, прошу указать мне такие условия:
char plain_str[] = "12345";
std::string someStlStr(plain_str);
const char *str = someStlStr.c_str();
SomeFunc(str); // не факт, что здесь была передана верная строка...
int result = strcmp(str, plain_str);


MN>И уж тем более никто не гарантирует, что будет работать это:

MN>
MN>const char *str = someStlStr.c_str();
MN>someStlStr += "qwert";
MN>SomeFunc(str); // вот я не берусь сказать, что вы передали...
MN>


D>>Уважаемый ALL подскажите реализации STL использующие для строк различные несмежные блоки памяти, хотелось бы посмотреть устройство и логику работы string.


MN>Да пожалуйста: реализации stl идущие с MS VC 6.0 — 7.1 включительно... Они оптимизируют хранение строк малых размеров и внутри себя содержат 2 буфера — один выделенный статически размером в 15 символов, другой выделяется динамически, если строка вылезает за пределы 15 символов...


В stl идущие с MS VC 6.0 — 7.1 имеется буфер статический, а если его недостаточно, то динамический, то в конкретный момент времени используется только один, а не оба сразу,
вы не поняли вопроса: Покажите мне реализацию stl которая использует для хранения несколько несмежных буферов, а затем сливает это все в один, а затем следуя вашей точке зрения освобождает его, надо полагать делать это она должна в деструкторе string.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.