в ней внутре вызвался маллок, а нулями не забивалось? не нужны мне нули, медленно выходит. Я хочу строку размера 1024 чтобы в нее сделать read например. А у меня оно забивает во время создания строки нулями и получается лишнюю работу делает.
В продвинутых местах хакают https://github.com/abseil/abseil-cpp/blob/master/absl/strings/internal/resize_uninitialized.h
Стандартная строка ещё способна дать жару. Правда, нужно помнить про побочки - assign() используется не только в resize(). Но в задаче "тупого буфера" хватит и такого варианта, на мой взгляд
С кастомными char_traits крайне неудобно эту строчку таскать за собой
Для этой задачи точно нужна стринга, а не, скажем, unique_ptr<char[]> с вашим маллоком?
std::string::reserve?
Заполненная руками после reserve() строка практически бесполезна
В каком смысле? Не очевидно
> Многие методы проверяют размер > Нельзя скопировать без ручного вызова memcpy > Нельзя уменьшить размер без стирания содержимого > SSO становится врагом при мувах > Анализаторы будут ругаться на выход за границы, в случае дебажного режима STL отваливается практически всё, кроме data()
А причем здесь reserve, который призван всего лишь увеличить capacity?
Разговор начался с использования строки в качестве буфера - например, для получения данных от ОС - без "дорогого затирания нулями". Потом, правда, выяснилось, что memset() причиной тормозов не являлась))
Легально не существует, есть proposal только. Ещё можно посмотреть в folly хаки: https://github.com/facebook/folly/blob/master/folly/memory/UninitializedMemoryHacks.h
Вот кстати ещё статья как они в private залезают: https://accu.org/journals/overload/28/156/harrison_2776/
это кстати легально
Да, согласен, неудачный термин. Лучше сказать что нет стандартных способов.
Маллок в конструктор запихнуть
Ну офигеть просто 8)
Некропостеры
Археолог?
Обсуждают сегодня