Вы просто оптимизируете длину кода или пытаетесь сохранить себе копию здесь? Что случилось с временным буфером?
Я бы сказал, что вы на самом деле обходите защиту строчки, пытающейся написать прямо так, как это. Если вы беспокоитесь о производительности копии в std :: string, потому что вы определили, что это каким-то образом влияет на производительность вашего приложения, я буду работать непосредственно с char *.
EDIT:. Делать больше глядя ... initializing std::string from char* without copy
Во втором ответе, он заявил, довольно решительно, что вы не можете добиться того, что вы хотите достичь (то есть заполнить зЬй :: строку без итерация над символом char * для копирования.)
Посмотрите на свою рутину загрузки (разместите ее здесь, возможно?) и минимизируйте выделение: новые и удаленные, конечно, не являются бесплатными, поэтому вы можете хотя бы сэкономить некоторое время, если вы не нужно постоянно создавать буфер. Я всегда нахожу, что это полезно, стереть его с помощью memset'ing буфера до 0 или нулевого завершения первого индекса массива на каждой итерации, но вы можете быстро устранить этот код в интересах производительности, как только будете уверены в своем алгоритме.
Вы думали об использовании '' вектор вместо 'string'? Если ваши данные более «сырые», чем «строковые», это может сработать лучше для вас, и есть меньше путаницы в отношении прямого доступа. (Векторы должны храниться смежно, поэтому используйте '& v [0]'.) –
2009-11-29 19:14:16
По большей части это строковые данные, просто встроенные в большие двоичные файлы.Также я хочу только изменить подпрограммы загрузки, а не 1000 строк кода, которые затем используют загруженные данные, которые потребуются для изменения из std :: string. –
Затем я проверил вашу конкретную реализацию строки, а затем воспользуюсь ответом GMan, убедитесь, что вы проверили поток после 'is.read'. – 2009-11-29 19:21:43