Управление динамической памятью
Материал из cppreference.com
< cpp
[править] Умные указатели
Умные указатели обеспечивают автоматическое безопасное управление временем жизни объектов.
Определены в заголовочном файле
<memory> | |
Категории указателей | |
(C++11) |
умный указатель с уникальной семантикой владения объектом (шаблон класса) |
(C++11) |
умный указатель с семантикой владения разделяемым объектом (шаблон класса) |
(C++11) |
слабая ссылка на объект, управляемый std::shared_ptr (шаблон класса) |
(устарело в C++11)(удалено в 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++11) |
объект типа std::allocator_arg_t, используемый для выбора конструкторов с учётом аллокатора (константа) |
(C++11) |
проверяет, поддерживает ли указанный тип конструирование с uses_allocator (шаблон класса) |
подготавливает список аргументов, соответствующий варианту создания с использованием аллокатора, требуемый данным типом (шаблон функции) | |
(C++20) |
создаёт объект данного типа с помощью конструирования с использованием аллокатора (шаблон функции) |
создаёт объект данного типа в указанной области памяти с помощью конструирования с использованием аллокатора (шаблон функции) | |
Определены в заголовочном файле
<scoped_allocator> | |
(C++11) |
реализует многоуровневый аллокатор для многоуровневых контейнеров (шаблон класса) |
Определены в заголовочном файле
<memory_resource> | |
Определены в пространстве имён
std::pmr | |
(C++17) |
аллокатор, который поддерживает полиморфизм времени выполнения на основе std::pmr::memory_resource, с использованием которого он построен (шаблон класса) |
[править] Ресурсы памяти (начиная с C++17)
Ресурсы памяти реализуют стратегии выделения памяти, которые может использовать 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 | |
Определяют некоторые операцию над итераторами, ограничителями и диапазонами, которые не бросают исключение (только для пояснения concept*) | |
(C++20) |
копирует диапазон объектов в неинициализированную область памяти (ниблоид) |
(C++20) |
копирует ряд объектов в неинициализированную область памяти (ниблоид) |
(C++20) |
копирует объект в неинициализированную область памяти, определяемую диапазоном (ниблоид) |
(C++20) |
копирует объект в неинициализированную область памяти, определяемую началом и количеством (ниблоид) |
(C++20) |
перемещает диапазон объектов в неинициализированную область памяти (ниблоид) |
(C++20) |
перемещает ряд объектов в неинициализированную область памяти (ниблоид) |
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном (ниблоид) | |
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой началом и количеством (ниблоид) | |
создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном (ниблоид) | |
создаёт объекты инициализированные значением в неинициализированной области памяти, определяемой началом и количеством (ниблоид) | |
(C++20) |
уничтожает объект по заданному адресу (ниблоид) |
(C++20) |
уничтожает диапазон объектов (ниблоид) |
(C++20) |
уничтожает несколько объектов в диапазоне (ниблоид) |
(C++20) |
создаёт объект по заданному адресу (ниблоид) |
[править] Поддержка сборщика мусора (начиная с C++23)
Определены в заголовочном файле
<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) |
возвращает текущую модель безопасности указателя (функция) |
[править] Явное управление временем жизни (начиная с C++23)
Определены в заголовочном файле
<memory> | |
неявно создаёт объекты в данном хранилище с повторно используемым представлением объекта (шаблон функции) |
[править] Разное
Определены в заголовочном файле
<memory> | |
(C++11) |
предоставляет информацию о типах, подобных указателям (шаблон класса) |
(C++20) |
получает сырой указатель из типа, подобного указателю (шаблон функции) |
(C++11) |
получает фактический адрес объекта, даже если оператор & перегружен (шаблон функции) |
(C++11) |
выравнивает указатель в буфере (функция) |
(C++20) |
сообщает компилятору, что указатель выровнен (шаблон функции) |
[править] Низкоуровневое управление памятью
Включает например operator new, operator delete, std::set_new_handler
Определены в заголовочном файле
<new> |
[править] Управление памятью в стиле C
Включает например std::malloc, std::free
Определены в заголовочном файле
<cstdlib> |