Для того, чтобы получать неинициализированную область памяти, можно использовать и malloc и std::get_temporary_buffer. Простой пример: чтобы не записать поверх, выделяю неинициализированную область для получения массива с алфавитом
constexpr size_t N = 26;
// вариант №1
char* pch = (char*)malloc(N + 1);
pch[N] = 0;
std::iota(pch, pch + N, 'a');
std::cout << pch << std::endl;
free(pch);
То же самое можно сделать так:
//вариант 2
auto p = std::get_temporary_buffer<char>(N);
char* arr = p.first;
std::iota(arr, arr + p.second, 'a');
arr[p.second] = 0;
std::cout << arr;
std::return_temporary_buffer(arr);
Что может являться причиной того, чтобы прибегнуть ко второму варианту? P.S. Столкнулся с данной проблемой выбора при реализации метода reserve некого контейнера
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости