Управление динамической памятью
Материал из cppreference.com
< cpp
Содержание |
[править] Умные указатели
Умные указатели обеспечивают автоматическое безопасное управление временем жизни объектов.
| Определены в заголовочном файле
<memory> | |
Категории указателей | |
| (C++11) |
умный указатель с уникальной семантикой владения объектом (шаблон класса) |
| (C++11) |
умный указатель с семантикой владения разделяемым объектом (шаблон класса) |
| (C++11) |
слабая ссылка на объект, управляемый std::shared_ptr (шаблон класса) |
| (убрано в C++17) |
умный указатель со строгой семантикой владения объектом (шаблон класса) |
Вспомогательные классы | |
| (C++11) |
обеспечивает смешанный тип разделяемых и слабых указателей на основе владельцев (шаблон класса) |
| (C++11) |
позволяет объекту создавать shared_ptr, ссылаясь на себя (шаблон класса) |
| (C++11) |
исключение, возникающее при доступе к weak_ptr, который ссылается на уже уничтоженный объект (класс) |
| (C++11) |
средство удаления по умолчанию для unique_ptr (шаблон класса) |
Адаптеры для умных указателей | |
| (C++23) |
взаимодействует с внешними установщиками указателей и сбрасывает умный указатель при уничтожении (шаблон класса) |
| (C++23) |
создаёт out_ptr_t с ассоциированным умным указателем и сбрасывает аргументы (шаблон функции) |
| (C++23) |
взаимодействует с внешними установщиками указателей, получает начальное значение указателя из умного указателя и сбрасывает его при уничтожении (шаблон класса) |
| (C++23) |
создаёт inout_ptr_t с ассоциированным умным указателем и сбрасывает аргументы (шаблон функции) |
[править] Аллокаторы
Аллокаторы, это шаблоны классов, инкапсулирующие стратегию выделения памяти. Это позволяет универсальным контейнерам отделить управление памятью от самих данных.
| Определены в заголовочном файле
<memory> | |
| аллокатор по умолчанию (шаблон класса) | |
| (C++11) |
предоставляет информацию о типах аллокаторов (шаблон класса) |
| (C++23) |
записывает адрес и фактический размер памяти, выделенной allocate_at_least (шаблон класса) |
| (C++23) |
выделяет память размером не менее запрошенного через аллокатор (шаблон функции) |
| (C++11) |
тип тега, используемого для выбора перегрузок конструктора с учётом распределителя (класс) |
| (C++11) |
объект типа std::allocator_arg_t, используемый для выбора конструкторов с учётом аллокатора (константа) |
| (C++11) |
проверяет, поддерживает ли указанный тип конструкцию uses_allocator (шаблон класса) |
| подготавливает список аргументов, соответствующий особенности конструкции uses_allocator, требуемый для данного типа (шаблон функции) | |
| (C++20) |
создаёт объект данного типа с помощью конструкции uses_allocator (шаблон функции) |
| создаёт объект данного типа в указанной области памяти с помощью конструкции uses_allocator (шаблон функции) | |
| Определены в заголовочном файле
<scoped_allocator> | |
| (C++11) |
реализует многоуровневый аллокатор для многоуровневых контейнеров (шаблон класса) |
| Определены в заголовочном файле
<memory_resource> | |
| Определены в пространстве имён
std::pmr | |
| (C++17) |
аллокатор, который поддерживает полиморфизм времени выполнения на основе std::memory_resource, с использованием которого он построен (шаблон класса) |
[править] Ресурсы памяти
Ресурсы памяти реализуют стратегии выделения памяти, которые может использовать std::pmr::polymorphic_allocator
| Определены в заголовочном файле
<memory_resource> | |
| Определены в пространстве имён
std::pmr | |
| (C++17) |
абстрактный интерфейс для классов, которые инкапсулируют ресурсы памяти (класс) |
| (C++17) |
возвращает статический программный std::pmr::memory_resource, который использует глобальные operator new и operator delete для выделения и освобождения памяти (функция) |
| (C++17) |
возвращает статический std::pmr::memory_resource, который не выполняет выделение памяти (функция) |
| (C++17) |
получает значение по умолчанию std::pmr::memory_resource (функция) |
| (C++17) |
устанавливает std::pmr::memory_resource по умолчанию (функция) |
| (C++17) |
набор параметров конструктора для ресурсов пула (класс) |
| (C++17) |
поточно-ориентированный std::pmr::memory_resource для управления выделениями в пулах блоков с разными размерами (класс) |
| (C++17) |
небезопасный для потока std::pmr::memory_resource для управления выделениями памяти в пулах с разными размерами блоков (класс) |
| (C++17) |
специальный std::pmr::memory_resource, который освобождает выделенную память только при уничтожении ресурса (класс) |
[править] Неинициализированное хранилище
Для создания и доступа к необработанному хранилищу предоставляется несколько утилит.
| Определены в заголовочном файле
<memory> | |
| (не рекомендуется в C++17) (убрано в C++20) |
итератор, который позволяет стандартным алгоритмам сохранять результаты в неинициализированной памяти (шаблон класса) |
| (не рекомендуется в C++17) (убрано в C++20) |
получает неинициализированное хранилище (шаблон функции) |
| (не рекомендуется в C++17) (убрано в C++20) |
освобождает неинициализированное хранилище (шаблон функции) |
[править] Алгоритмы неинициализированной памяти
| Определены в заголовочном файле
<memory> | |
| копирует диапазон объектов в неинициализированную область памяти (шаблон функции) | |
| (C++11) |
копирует ряд объектов в неинициализированную область памяти (шаблон функции) |
| копирует объект в неинициализированную область памяти, определяемую диапазоном (шаблон функции) | |
| копирует объект в неинициализированную область памяти, определяемую началом и количеством (шаблон функции) | |
| (C++17) |
перемещает диапазон объектов в неинициализированную область памяти (шаблон функции) |
| (C++17) |
перемещает ряд объектов в неинициализированную область памяти (шаблон функции) |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном (шаблон функции) | |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством (шаблон функции) | |
| создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном (шаблон функции) | |
| создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой началом и количеством (шаблон функции) | |
| (C++17) |
уничтожает объект по заданному адресу (шаблон функции) |
| (C++17) |
уничтожает диапазон объектов (шаблон функции) |
| (C++17) |
уничтожает несколько объектов в диапазоне (шаблон функции) |
| (C++20) |
создаёт объект по заданному адресу (шаблон функции) |
[править] Ограниченные алгоритмы неинициализированной памяти (C++20)
C++20 предоставляет ограниченные алгоритмы неинициализированной памяти, которые принимают аргументы диапазона или пары итератор-ограничитель.
| Определены в заголовочном файле
<memory> | |
| Определены в пространстве имён
std::ranges | |
| определяют некоторую операцию над итераторами, ограничителями и диапазонами, которые не бросают исключение (концепт только для экспозиции) | |
| (C++20) |
копирует диапазон объектов в неинициализированную область памяти (ниблоид) |
| (C++20) |
копирует ряд объектов в неинициализированную область памяти (ниблоид) |
| (C++20) |
копирует объект в неинициализированную область памяти, определяемую диапазоном (ниблоид) |
| (C++20) |
копирует объект в неинициализированную область памяти, определяемую началом и количеством (ниблоид) |
| (C++20) |
перемещает диапазон объектов в неинициализированную область памяти (ниблоид) |
| (C++20) |
перемещает ряд объектов в неинициализированную область памяти (ниблоид) |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном (ниблоид) | |
| создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством (ниблоид) | |
| создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном (ниблоид) | |
| создаёт объекты инициализированные значением в неинициализированной области памяти, определяемой началом и количеством (ниблоид) | |
| (C++20) |
уничтожает объект по заданному адресу (ниблоид) |
| (C++20) |
уничтожает диапазон объектов (ниблоид) |
| (C++20) |
уничтожает несколько объектов в диапазоне (ниблоид) |
| (C++20) |
создаёт объект по заданному адресу (ниблоид) |
[править] Поддержка сборщика мусора
| Определены в заголовочном файле
<memory> | |
| (C++11)(удалено в C++23) |
объявляет, что объект не может быть использован повторно (функция) |
| (C++11)(удалено в C++23) |
объявляет, что объект может быть использован повторно (шаблон функции) |
| (C++11)(удалено в C++23) |
объявляет, что область памяти не содержит отслеживаемых указателей (функция) |
| (C++11)(удалено в C++23) |
отменяет действие std::declare_no_pointers (функция) |
| (C++11)(удалено в C++23) |
перечисляет модели безопасности указателя (перечисление) |
| (C++11)(удалено в C++23) |
возвращает текущую модель безопасности указателя (функция) |
[править] Разное
| Определены в заголовочном файле
<memory> | |
| (C++11) |
предоставляет информацию о типах, подобных указателям (шаблон класса) |
| (C++20) |
получает сырой указатель из типа, подобного указателю (шаблон функции) |
| (C++11) |
получает фактический адрес объекта, даже если оператор & перегружен (шаблон функции) |
| (C++11) |
выравнивает указатель в буфере (функция) |
| (C++20) |
сообщает компилятору, что указатель выровнен (шаблон функции) |
[править] Управление памятью в стиле C
Включает, например, std::malloc, std::free
[править] Низкоуровневое управление памятью
Включает, например, operator new, operator delete, std::set_new_handler

