Хотя это немного неортодоксально, но вполне допустимо использовать std::string
в качестве буфера линейной памяти, единственное предостережение в том, что он не поддерживается стандартом до C ++ 11, т.е.
std::string s;
char* s_ptr = &s[0]; // get at the buffer
Цитировать Херб Саттер ,
Каждая реализация std :: string, о которой я знаю, на самом деле является смежной и завершает нулевой буфер. Так что, хотя это не формально
гарантировано, на практике вам, вероятно, удастся избежать вызова & str
чтобы получить указатель на непрерывную строку с нулевым символом в конце. (Но
быть безопасным, вы все равно должны использовать str.c_str ().)
Вероятно, это ключ здесь. Поэтому, хотя это и не гарантия, вы должны полагаться на принцип, согласно которому std::string
является линейным буфером памяти, и вам следует утверждать факты об этом в своем наборе тестов, просто чтобы быть уверенным.
Вы всегда можете создать свой собственный буферный класс, но когда вы хотите купить, это то, что может предложить STL.