Тёмный

C++ 24. Перегрузка new и delete. Аллокаторы 

Лекторий ФПМИ
Подписаться 53 тыс.
Просмотров 8 тыс.
50% 1

Опубликовано:

 

3 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 14   
@ivankorotkov2563
@ivankorotkov2563 3 года назад
27:33 были выбраны версии delete(void* ptr), delete[](void* ptr) без size_t. Правила выбора довольно неочевидны, поэтому если знание о размере не нужны, то достаточно переопределить только варианты без size_t, так как дефолтные варианты не используют size_t. Глубоко не разбирался но на g++ для неполиморфных типов удаление T* передает в delete size = sizeof(T), а для полиморфных типов (и типов в которых используется виртуальное наследование) передает правильный размер, беря его из rtti.
@bama2619
@bama2619 2 года назад
6:16 Новая тема: Аллокаторы 8:13 Зачем нужна перегрузка new delete (пример Записей выделения и освобождения памяти)... 01:01:20 - 01:13:00 Аллокаторы (высокоуровневая надстройка - класс над delete (free in C) and new (malloc in C) ) 01:14:00 Устройство стандартного Аллокатора 01:23:00 new не конструирует объект, конструктор объекта вызывается через allocator::construct 01:29:00 Переписать свой Вектор уже без new а c allocator
@user-1asdv19dl
@user-1asdv19dl Год назад
оператор delete принимает size_t чтобы можно было что-то сделать с памятью, например сохранить для дампа или забить нулями для обезопасивания
@bama2619
@bama2619 2 года назад
00:00:00 - Адаптеры над контейнерами 00:06:05 - operator new, operator delete 00:18:44 - operator new[], operator delete[] 00:23:35 - std::vector и new 00:29:40 - new expression, delete expression 00:34:27 - operator new для своего типа 00:42:00 - placement new, nothrow 01:00:30 - Аллокаторы Лектор: Илья Мещерин Дата лекции: 15.02.2021 Монтаж: Дмитрий Купцов
@eugenebespalov9471
@eugenebespalov9471 8 месяцев назад
Видео №25 просто нет? Как 13 этажа в американских зданиях? Загадочно...
@niklkelbon3662
@niklkelbon3662 3 года назад
Я что то сомневаюсь, что автор прав при объяснении того как и почему new так работает. Я думаю скорее так - есть дефолтный new, к у которого куча разных перегрузок, так, когда мы пишем auto p = new int[10], то auto определяется как INT*, а не void*, что означает, что существует template T* operator new(size_t N, Args ... args), который в свою очередь работает как вызов других перегрузок оператора new, например : new (malloc(sizeof(T)*N) (args ...) , то есть вызов placement new в адрес (выделяем память), передаём аргументы конструктора. А та перегрузка new в свою очередь просто вызывает конструктор объекта в нужном месте. new[] делаёт в цикле кучу вызовов placement_new, после выделения памяти, вот собственно и всё. А то автор прямо тумана нагнал на это, будто там магия происходит совершенная и вообще хз что.
@das67334
@das67334 3 года назад
1) gcc: 'operator new' must return type 'void*' 2) stackoverflow.com/questions/8962467/why-is-the-new-operator-allowed-to-return-void-to-every-pointer-type : "The 'new' operator is not a function and not a function call. It's a separate language construct. It takes raw memory (normally, one returned by the void* operator new(size_t) function) and turns it into an object by calling a constructor. It then returns a properly typed pointer to the newly-created object."
@shamilmukhetdinov6828
@shamilmukhetdinov6828 3 года назад
А это 25 лекция запривачена?)
@shamilmukhetdinov6828
@shamilmukhetdinov6828 3 года назад
@@Reavolt спасибо
@niklkelbon3662
@niklkelbon3662 3 года назад
на 1:26:00 вопрос про переменное количество аргументов тоже считаю как то неправильно раскрыт. Не просто "мы такие высокоуровневые, а там какая то сишка", а разница принципиальная - либо мы всегда имеем одну и ту же сигнатуру функции и принимаем условно говоря указатель на массив аргументов, завершающийся специальным нулевым аргументом ,а потом в рантайме что то с ними делаем и куда то в циклах раскидываем с помощью макросов, либо же мы на этапе компиляции делаем с помощью компилятора именно другую сигнатуру - как и должно это быть, ведь у нас может быть 4 аргумента, а может быть 5 и мы такую функцию и создаём и используем её в рантайме уже готовую. И да, конечно, аргументы шаблона переданные как const Args& это тот ещё пиздец.
@das67334
@das67334 3 года назад
Предлагаете передавать аргументы шаблона как (Args... args)? Тогда вы не сможете передать константые или некопируемые объекты. Perfect forwarding в 29 лекции
@niklkelbon3662
@niklkelbon3662 3 года назад
@@das67334 ты про универсальные ссылки слышал?
@das67334
@das67334 3 года назад
@@niklkelbon3662 Perfect forwarding в 29 лекции
Далее
Китайка стучится Домой😂😆
00:18
NetworksOnSaturdays
2:18:37
Просмотров 8
Perl-Conf.Ru/24
2:30:47
Просмотров 186
С++ 29. Perfect forwarding, xvalues, reference qualifiers
1:31:26
Запросы в 1С за 3 часа. Часть 2
3:17:01