C ++, как создать std :: string, содержащий размер неинициализированных байтов? - PullRequest
2 голосов
/ 23 апреля 2020

мне нужен std :: string size байтов, после его создания я собираюсь записать каждый байт в этой строке перед чтением из нее, таким образом, нулевая инициализация строки - пустая трата процессора, это работает :

std::string s(size,0);

но это просто немного расточительно, это все равно что использовать calloc(), когда все, что мне нужно, это malloc(), поэтому вопрос в том, как мне создать строку из X неинициализированных байтов?

(использование reserve () + pu sh - не вариант, потому что я передаю строку C -api, принимая char*,size для фактической инициализации)

edit: this thread кажется, примерно такая же проблема / связанная (но с векторами вместо строк): Value-Initialized Objects в C ++ 11 и конструктор std :: vector

1 Ответ

4 голосов
/ 23 апреля 2020

Вы не можете сделать это с std::string. Но это может быть достигнуто другим способом, например, используя std::unique_ptr<char[]>.

auto pseudo_string = std::unique_ptr<char[]>(new char[size]);

или если ваш компилятор поддерживает C ++ 20

auto pseudo_string = std::make_unique_for_overwrite<char[]>(size);
...