Для того, чтобы получать неинициализированную область памяти, можно использовать и 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
некого контейнера
Виртуальный выделенный сервер (VDS) становится отличным выбором
Возникло несколько вопросав в связи с copy ellision, c++17 и использованием компилятора clang++-8
В чём основное отличие этих способов ввода/вывода? Можно ли в C++ использовать спокойно функции scanf/printf или есть какие-то подводные камни?