Для того, чтобы получать неинициализированную область памяти, можно использовать и 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
некого контейнера
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Возникло несколько вопросав в связи с copy ellision, c++17 и использованием компилятора clang++-8
В чём основное отличие этих способов ввода/вывода? Можно ли в C++ использовать спокойно функции scanf/printf или есть какие-то подводные камни?